列表框数据事件演示 : 列表 « 图形用户界面 « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » 图形用户界面 » 列表屏幕截图 
列表框数据事件演示
列表框数据事件演示

/* From http://java.sun.com/docs/books/tutorial/index.html */
/*
 * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * -Redistribution of source code must retain the above copyright notice, this
 *  list of conditions and the following disclaimer.
 *
 * -Redistribution in binary form must reproduce the above copyright notice,
 *  this list of conditions and the following disclaimer in the documentation
 *  and/or other materials provided with the distribution.
 *
 * Neither the name of Sun Microsystems, Inc. or the names of contributors may
 * be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * This software is provided "AS IS," without a warranty of any kind. ALL
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. ("SUN")
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 *
 * You acknowledge that this software is not designed, licensed or intended
 * for use in the design, construction, operation or maintenance of any
 * nuclear facility.
 */

/*
 * ListDataEventDemo.java is a 1.4 example that requires the Java Look and Feel
 * Graphics Repository (jlfgr-1_0.jar). You can download this file from
 * http://developer.java.sun.com/developer/techDocs/hi/repository/. Put it in
 * the class path using one of the following commands (assuming jlfgr-1_0.jar is
 * in a subdirectory named jars):
 
 * java -cp .;jars/jlfgr-1_0.jar ListDataEventDemo [Microsoft Windows] java -cp
 * .:jars/jlfgr-1_0.jar ListDataEventDemo [UNIX]
 
 * I needed to put quotation marks around the path, since I use a UNIX-emulating
 * shell on Win32:
 
 * java -cp ".;jars/jlfgr-1_0.jar" ListDataEventDemo [UNIX shell on Win32]
 */

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class ListDataEventDemo extends JPanel implements ListSelectionListener {
  private JList list;

  private DefaultListModel listModel;

  private static final String addString = "Add";

  private static final String deleteString = "Delete";

  private static final String upString = "Move up";

  private static final String downString = "Move down";

  private JButton addButton;

  private JButton deleteButton;

  private JButton upButton;

  private JButton downButton;

  private JTextField nameField;

  private JTextArea log;

  static private String newline = "\n";

  public ListDataEventDemo() {
    super(new BorderLayout());

    //Create and populate the list model.
    listModel = new DefaultListModel();
    listModel.addElement("Whistler, Canada");
    listModel.addElement("Jackson Hole, Wyoming");
    listModel.addElement("Squaw Valley, California");
    listModel.addElement("Telluride, Colorado");
    listModel.addElement("Taos, New Mexico");
    listModel.addElement("Snowbird, Utah");
    listModel.addElement("Chamonix, France");
    listModel.addElement("Banff, Canada");
    listModel.addElement("Arapahoe Basin, Colorado");
    listModel.addElement("Kirkwood, California");
    listModel.addElement("Sun Valley, Idaho");
    listModel.addListDataListener(new MyListDataListener());

    //Create the list and put it in a scroll pane.
    list = new JList(listModel);
    list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    list.setSelectedIndex(0);
    list.addListSelectionListener(this);
    JScrollPane listScrollPane = new JScrollPane(list);

    //Create the list-modifying buttons.
    addButton = new JButton(addString);
    addButton.setActionCommand(addString);
    addButton.addActionListener(new AddButtonListener());

    deleteButton = new JButton(deleteString);
    deleteButton.setActionCommand(deleteString);
    deleteButton.addActionListener(new DeleteButtonListener());

    ImageIcon icon = createImageIcon("Up16");
    if (icon != null) {
      upButton = new JButton(icon);
      upButton.setMargin(new Insets(0000));
    else {
      upButton = new JButton("Move up");
    }
    upButton
        .setToolTipText("Move the currently selected list item higher.");
    upButton.setActionCommand(upString);
    upButton.addActionListener(new UpDownListener());

    icon = createImageIcon("Down16");
    if (icon != null) {
      downButton = new JButton(icon);
      downButton.setMargin(new Insets(0000));
    else {
      downButton = new JButton("Move down");
    }
    downButton
        .setToolTipText("Move the currently selected list item lower.");
    downButton.setActionCommand(downString);
    downButton.addActionListener(new UpDownListener());

    JPanel upDownPanel = new JPanel(new GridLayout(21));
    upDownPanel.add(upButton);
    upDownPanel.add(downButton);

    //Create the text field for entering new names.
    nameField = new JTextField(15);
    nameField.addActionListener(new AddButtonListener());
    String name = listModel.getElementAt(list.getSelectedIndex())
        .toString();
    nameField.setText(name);

    //Create a control panel, using the default FlowLayout.
    JPanel buttonPane = new JPanel();
    buttonPane.add(nameField);
    buttonPane.add(addButton);
    buttonPane.add(deleteButton);
    buttonPane.add(upDownPanel);

    //Create the log for reporting list data events.
    log = new JTextArea(1020);
    JScrollPane logScrollPane = new JScrollPane(log);

    //Create a split pane for the log and the list.
    JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
        listScrollPane, logScrollPane);
    splitPane.setResizeWeight(0.5);

    //Put everything together.
    add(buttonPane, BorderLayout.PAGE_START);
    add(splitPane, BorderLayout.CENTER);
  }

  class MyListDataListener implements ListDataListener {
    public void contentsChanged(ListDataEvent e) {
      log.append("contentsChanged: " + e.getIndex0() ", "
          + e.getIndex1() + newline);
      log.setCaretPosition(log.getDocument().getLength());
    }

    public void intervalAdded(ListDataEvent e) {
      log.append("intervalAdded: " + e.getIndex0() ", " + e.getIndex1()
          + newline);
      log.setCaretPosition(log.getDocument().getLength());
    }

    public void intervalRemoved(ListDataEvent e) {
      log.append("intervalRemoved: " + e.getIndex0() ", "
          + e.getIndex1() + newline);
      log.setCaretPosition(log.getDocument().getLength());
    }
  }

  class DeleteButtonListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      /*
       * This method can be called only if there's a valid selection, so
       * go ahead and remove whatever's selected.
       */

      ListSelectionModel lsm = list.getSelectionModel();
      int firstSelected = lsm.getMinSelectionIndex();
      int lastSelected = lsm.getMaxSelectionIndex();
      listModel.removeRange(firstSelected, lastSelected);

      int size = listModel.size();

      if (size == 0) {
        //List is empty: disable delete, up, and down buttons.
        deleteButton.setEnabled(false);
        upButton.setEnabled(false);
        downButton.setEnabled(false);

      else {
        //Adjust the selection.
        if (firstSelected == listModel.getSize()) {
          //Removed item in last position.
          firstSelected--;
        }
        list.setSelectedIndex(firstSelected);
      }
    }
  }

  /** A listener shared by the text field and add button. */
  class AddButtonListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      if (nameField.getText().equals("")) {
        //User didn't type in a name...
        Toolkit.getDefaultToolkit().beep();
        return;
      }

      int index = list.getSelectedIndex();
      int size = listModel.getSize();

      //If no selection or if item in last position is selected,
      //add the new one to end of list, and select new one.
      if (index == -|| (index + == size)) {
        listModel.addElement(nameField.getText());
        list.setSelectedIndex(size);

        //Otherwise insert the new one after the current selection,
        //and select new one.
      else {
        listModel.insertElementAt(nameField.getText(), index + 1);
        list.setSelectedIndex(index + 1);
      }
    }
  }

  //Listen for clicks on the up and down arrow buttons.
  class UpDownListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      //This method can be called only when
      //there's a valid selection,
      //so go ahead and move the list item.
      int moveMe = list.getSelectedIndex();

      if (e.getActionCommand().equals(upString)) {
        //UP ARROW BUTTON
        if (moveMe != 0) {
          //not already at top
          swap(moveMe, moveMe - 1);
          list.setSelectedIndex(moveMe - 1);
          list.ensureIndexIsVisible(moveMe - 1);
        }
      else {
        //DOWN ARROW BUTTON
        if (moveMe != listModel.getSize() 1) {
          //not already at bottom
          swap(moveMe, moveMe + 1);
          list.setSelectedIndex(moveMe + 1);
          list.ensureIndexIsVisible(moveMe + 1);
        }
      }
    }
  }

  //Swap two elements in the list.
  private void swap(int a, int b) {
    Object aObject = listModel.getElementAt(a);
    Object bObject = listModel.getElementAt(b);
    listModel.set(a, bObject);
    listModel.set(b, aObject);
  }

  //Listener method for list selection changes.
  public void valueChanged(ListSelectionEvent e) {
    if (e.getValueIsAdjusting() == false) {

      if (list.getSelectedIndex() == -1) {
        //No selection: disable delete, up, and down buttons.
        deleteButton.setEnabled(false);
        upButton.setEnabled(false);
        downButton.setEnabled(false);
        nameField.setText("");

      else if (list.getSelectedIndices().length > 1) {
        //Multiple selection: disable up and down buttons.
        deleteButton.setEnabled(true);
        upButton.setEnabled(false);
        downButton.setEnabled(false);

      else {
        //Single selection: permit all operations.
        deleteButton.setEnabled(true);
        upButton.setEnabled(true);
        downButton.setEnabled(true);
        nameField.setText(list.getSelectedValue().toString());
      }
    }
  }

  /** Returns an ImageIcon, or null if the path was invalid. */
  protected static ImageIcon createImageIcon(String imageName) {
    String imgLocation = "toolbarButtonGraphics/navigation/" + imageName
        ".gif";
    java.net.URL imageURL = ListDataEventDemo.class
        .getResource(imgLocation);

    if (imageURL == null) {
      System.err.println("Resource not found: " + imgLocation);
      return null;
    else {
      return new ImageIcon(imageURL);
    }
  }

  /**
   * Create the GUI and show it. For thread safety, this method should be
   * invoked from the event-dispatching thread.
   */
  private static void createAndShowGUI() {
    //Make sure we have nice window decorations.
    JFrame.setDefaultLookAndFeelDecorated(true);

    //Create and set up the window.
    JFrame frame = new JFrame("ListDataEventDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Create and set up the content pane.
    JComponent newContentPane = new ListDataEventDemo();
    newContentPane.setOpaque(true)//content panes must be opaque
    frame.setContentPane(newContentPane);

    //Don't let the content pane get too small.
    //(Works if the Java look and feel provides
    //the window decorations.)
    newContentPane.setMinimumSize(new Dimension(newContentPane
        .getPreferredSize().width, 100));

    //Display the window.
    frame.pack();
    frame.setVisible(true);
  }

  public static void main(String[] args) {
    //Schedule a job for the event-dispatching thread:
    //creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        createAndShowGUI();
      }
    });
  }
}

           
       
Related examples in the same category
1. 使用JList组件以显示自定义的项目ListCellRenderer使用JList组件以显示自定义的项目ListCellRenderer
2. JList与DefaultListModelJList与DefaultListModel
3. 从一系列的字符串值创建JList从一系列的字符串值创建JList
4. 图形列表选择事件监听图形列表选择事件监听
5. Test of the DragGesture classes and JList to see if we can recognize a simple drag gestureTest of the DragGesture classes and JList to see if we can recognize a simple drag gesture
6. 双JList之间的按钮双JList之间的按钮
7. 继承ListCellRenderer来显示图标继承ListCellRenderer来显示图标
8. 添加JList到滚动窗格添加JList到滚动窗格
9. JList和ComboBoxJList和ComboBox
10. JList选择改变事件监听JList选择改变事件监听
11. 三列表相同的数据数组三列表相同的数据数组
12. List with and without ScrollPane List with and without ScrollPane
13. 设置固定单元格高度和宽度设置固定单元格高度和宽度
14. 名单:共享数据名单:共享数据
15. 如何使用列表框控件如何使用列表框控件
16. 创建名单,从名单模型创建名单,从名单模型
17. 如何创建列单元格渲染如何创建列单元格渲染
18. 列表选择事件列表选择事件
19. 构建列表框控件构建列表框控件
20. 标签列表渲染标签列表渲染
21. 列表框文本输入列表框文本输入
22. JList和JComboBox之间共享模型JList和JComboBox之间共享模型
23. 演示ScrollingList演示ScrollingList
24. 演示JList ListModel演示JList ListModel
25. 弱ListModel
26. ListModel演示ListModel演示
27. ModifyModelSample : ListModel演示ModifyModelSample : ListModel演示
28. ArrayList的ListModel ,易于使用
29. 拖放: JList和列表框拖放: JList和列表框
30. 列表框选择事件
31. JList is a component that displays a list of objects: It allows the user to select one or more items.JList is a component that displays a list of objects: It allows the user to select one or more items.
32. JTextArea是一个多行文本区域,显示纯文本。
33. JTextPane组件
34. JButton模型:管理按钮状态
35. 预设按钮模型
36. JList: ListModel and ListSelectionModel. The ListModel handles data. ListSelectionModel works with the GUI.JList: ListModel and ListSelectionModel. The ListModel handles data. ListSelectionModel works with the GUI.
37. 单选择JList。
38. JList组件项目选择改变事件
39. JList组件项目选择改变监听
40. 检测双重和三重点击中JList组件项目
41. 安排JList组件的项目
42. changes the layout orientation so that its items are displayed top-to-bottom and left-to-right.
43. Make the number of visible rows dependent on the height of the list, the visibleRowCount property must be set to 0:
44. 设置JList组件的选择模式
45. 选定的项目必须是在一个连续的范围
46. 多范围的选定项目
47. 在JList组件设置选定的项目
48. import javax.swing.JList;
49. 选择所有项目
50. 清除所有选择
51. 选择第一个项目
52. 添加另一个选择-第三个项目
53. 取消第一个项目
54. 选择一个项目
55. 在JList组件使用所选项目
56. 获得最后选定项目的索引
57. 确定是否第三个项目被选中
58. 确定是否有任何被选定的项目
59. 返回所选项目的对象
60. JList组件添加和删除项目
61. 附加项目
62. 插入一个项目到开始
63. 创建一个列表,允许添加和删除
64. 使用Set方法取代一个项目
65. 用来删除项目的方法
66. 获取JList组件中的控件
67. 用于找到一个项目的方法
68. 这些方法可以用来寻找可见的范围
69. 获取第一个可见项目的索引
70. 获取最后一个可见项目的索引
71. JList组件项目的工具提示
72. 设置JList组件项目的尺寸
73. 同样本设置列表框项目
74. 创建一个JList组件
75. The items can be arbitrary objects. The toString() method of the objects is displayed in the list component.
76. 在一个按钮组确定所选JRadioButton
77. 旋转一个微调事件
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.