⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listtest.java

📁 JAVA编程百例书中各章节的所有例子的源代码,包括套接字编程
💻 JAVA
字号:
package ch02.section06;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class ListTest
    extends JPanel
    implements ListSelectionListener {
  private JList list;
  private DefaultListModel listModel;

  private static final String addString = "增 加";
  private static final String delString = "删 除";
  private JButton fireButton;
  private JTextField employeeName;

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

    listModel = new DefaultListModel();
    listModel.addElement("北京市");
    listModel.addElement("天津市");
    listModel.addElement("重庆市");
    listModel.addElement("深圳市");
    listModel.addElement("广州市");
    listModel.addElement("上海市");

    //创建一个列表并将它放在一个滚动面板中
    list = new JList(listModel);
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    list.setSelectedIndex(0);
    list.addListSelectionListener(this);
    list.setVisibleRowCount(5);
    JScrollPane listScrollPane = new JScrollPane(list);

    JButton hireButton = new JButton(addString);
    HireListener hireListener = new HireListener(hireButton);
    hireButton.setActionCommand(addString);
    hireButton.addActionListener(hireListener);
    hireButton.setEnabled(false);

    fireButton = new JButton(delString);
    fireButton.setActionCommand(delString);
    fireButton.addActionListener(new FireListener());

    employeeName = new JTextField(10);
    employeeName.addActionListener(hireListener);
    employeeName.getDocument().addDocumentListener(hireListener);
    String name = listModel.getElementAt(
        list.getSelectedIndex()).toString();

    //创建一个面板,布局方式采用BoxLayout
    JPanel buttonPane = new JPanel();
    buttonPane.setLayout(new BoxLayout(buttonPane,
                                       BoxLayout.LINE_AXIS));
    buttonPane.add(fireButton);
    buttonPane.add(Box.createHorizontalStrut(5));
    buttonPane.add(new JSeparator(SwingConstants.VERTICAL));
    buttonPane.add(Box.createHorizontalStrut(5));
    buttonPane.add(employeeName);
    buttonPane.add(hireButton);
    buttonPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

    add(listScrollPane, BorderLayout.CENTER);
    add(buttonPane, BorderLayout.PAGE_END);
  }

  class FireListener
      implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      /*
       *方法用于将所选项删除
       */
      int index = list.getSelectedIndex();
      listModel.remove(index);

      int size = listModel.getSize();

      if (size == 0) {
        //fireButton按钮不可用
        fireButton.setEnabled(false);

      }
      else { //选择一项
        if (index == listModel.getSize()) {
          //除去最后一项
          index--;
        }

        list.setSelectedIndex(index);
        list.ensureIndexIsVisible(index);
      }
    }
  }

  //HireListener类主要封装文本区域和"增加"按钮事件响应的方法
  class HireListener
      implements ActionListener, DocumentListener {
    private boolean alreadyEnabled = false;
    private JButton button;

    public HireListener(JButton button) {
      this.button = button;
    }

    //actionPerformed(ActionEvent e)  方法用来为ActionListener调用
    public void actionPerformed(ActionEvent e) {
      String name = employeeName.getText();
      if (name.equals("") || alreadyInList(name)) {
        Toolkit.getDefaultToolkit().beep();
        employeeName.requestFocusInWindow();
        employeeName.selectAll();
        return;
      }

      int index = list.getSelectedIndex(); //取得选项的序号
      if (index == -1) { //如果没有一项被选择,则第一项被选择
        index = 0;
      }
      else {
        index++;
      }

      listModel.insertElementAt(employeeName.getText(), index);
      employeeName.requestFocusInWindow();
      employeeName.setText("");
      list.setSelectedIndex(index);
      list.ensureIndexIsVisible(index);
    }

    protected boolean alreadyInList(String name) {
      return listModel.contains(name);
    }

    //insertUpdate(DocumentEvent e)  方法用来为DocumentListener调用
    public void insertUpdate(DocumentEvent e) {
      enableButton();
    }

    //removeUpdate(DocumentEvent e)  方法用来为DocumentListener调用
    public void removeUpdate(DocumentEvent e) {
      handleEmptyTextField(e);
    }

    //changedUpdate(DocumentEvent e)  方法用来为DocumentListener调用
    public void changedUpdate(DocumentEvent e) {
      if (!handleEmptyTextField(e)) {
        enableButton();
      }
    }

    private void enableButton() {
      if (!alreadyEnabled) {
        button.setEnabled(true);
      }
    }

    private boolean handleEmptyTextField(DocumentEvent e) {
      if (e.getDocument().getLength() <= 0) {
        button.setEnabled(false);
        alreadyEnabled = false;
        return true;
      }
      return false;
    }
  }

  /**
   * valueChanged(ListSelectionEvent e) 方法用来为ListSelectionListener调用
   */
  public void valueChanged(ListSelectionEvent e) {
    if (e.getValueIsAdjusting() == false) {
      if (list.getSelectedIndex() == -1) {
        //没有选项被选种,则"删除"按钮不可用
        fireButton.setEnabled(false);
      }
      else {
        //有选项被选种,则"删除"可用
        fireButton.setEnabled(true);
      }
    }
  }

  /**
   * createAndShowGUI() 方法用来创建窗体,并显示
   */
  private static void createAndShowGUI() {
    //使界面有好的视觉效果
    JFrame.setDefaultLookAndFeelDecorated(true);
    //创建窗体
    JFrame frame = new JFrame("ListTest");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JComponent newContentPane = new ListTest();
    newContentPane.setOpaque(true);
    frame.setContentPane(newContentPane);
    //显示窗体
    frame.pack();
    frame.setVisible(true);
  }

  public static void main(String[] args) {
    //显示窗体
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        createAndShowGUI();
      }
    });
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -