?? listtest.java
字號(hào):
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("上海市");
//創(chuàng)建一個(gè)列表并將它放在一個(gè)滾動(dòng)面板中
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();
//創(chuàng)建一個(gè)面板,布局方式采用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) {
/*
*方法用于將所選項(xiàng)刪除
*/
int index = list.getSelectedIndex();
listModel.remove(index);
int size = listModel.getSize();
if (size == 0) {
//fireButton按鈕不可用
fireButton.setEnabled(false);
}
else { //選擇一項(xiàng)
if (index == listModel.getSize()) {
//除去最后一項(xiàng)
index--;
}
list.setSelectedIndex(index);
list.ensureIndexIsVisible(index);
}
}
}
//HireListener類主要封裝文本區(qū)域和"增加"按鈕事件響應(yīng)的方法
class HireListener
implements ActionListener, DocumentListener {
private boolean alreadyEnabled = false;
private JButton button;
public HireListener(JButton button) {
this.button = button;
}
//actionPerformed(ActionEvent e) 方法用來(lái)為ActionListener調(diào)用
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(); //取得選項(xiàng)的序號(hào)
if (index == -1) { //如果沒(méi)有一項(xiàng)被選擇,則第一項(xiàng)被選擇
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) 方法用來(lái)為DocumentListener調(diào)用
public void insertUpdate(DocumentEvent e) {
enableButton();
}
//removeUpdate(DocumentEvent e) 方法用來(lái)為DocumentListener調(diào)用
public void removeUpdate(DocumentEvent e) {
handleEmptyTextField(e);
}
//changedUpdate(DocumentEvent e) 方法用來(lái)為DocumentListener調(diào)用
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) 方法用來(lái)為L(zhǎng)istSelectionListener調(diào)用
*/
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting() == false) {
if (list.getSelectedIndex() == -1) {
//沒(méi)有選項(xiàng)被選種,則"刪除"按鈕不可用
fireButton.setEnabled(false);
}
else {
//有選項(xiàng)被選種,則"刪除"可用
fireButton.setEnabled(true);
}
}
}
/**
* createAndShowGUI() 方法用來(lái)創(chuàng)建窗體,并顯示
*/
private static void createAndShowGUI() {
//使界面有好的視覺(jué)效果
JFrame.setDefaultLookAndFeelDecorated(true);
//創(chuàng)建窗體
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();
}
});
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -