📄 listdemo.java
字号:
package viewtuba1;
import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.*;
import javax.swing.event.*;
public class ListDemo extends JPanel implements ListSelectionListener {
static JFrame frame;
static JComponent newContentPane;
private JList list;
private DefaultListModel listModel;
private static final String hireString = "新建卡号与密码";
private static final String fireString = "删除卡号与密码";
private JButton fireButton;
private JTextField employeeName;
public ListDemo() {
super(new BorderLayout());
// 构建List的列表元素
listModel = new DefaultListModel();
BufferedReader in;
try {
in = new BufferedReader(new FileReader("Info.csv"));
String sq = new String();
sq = in.readLine();
while (sq != null) {
listModel.addElement(sq);
sq = in.readLine();
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}
// 创建一个List构件,并将列表元素添加到列表中
list = new JList(listModel);
// 设置选择模式为单选
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// 初始化选择索引在0的位置,即第一个元素
list.setSelectedIndex(0);
list.addListSelectionListener(this);
// 设置列表可以同时看5个元素
list.setVisibleRowCount(10);
// 给列表添加一个滑动块
JScrollPane listScrollPane = new JScrollPane(list);
JButton hireButton = new JButton(hireString);
HireListener hireListener = new HireListener(hireButton);
hireButton.setActionCommand(hireString);
hireButton.addActionListener(hireListener);
hireButton.setEnabled(false);
employeeName = new JTextField(10);
employeeName.addActionListener(hireListener);
employeeName.getDocument().addDocumentListener(hireListener);
String name = listModel.getElementAt(list.getSelectedIndex())
.toString();
// 创建一个面板
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
fireButton = new JButton(fireString);
fireButton.setActionCommand(fireString);
fireButton.addActionListener(new FireListener());
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.setEnabled(false);
} else { // 选择了一个
if (index == listModel.getSize()) {
// 移除选项
index--;
}
list.setSelectedIndex(index);
list.ensureIndexIsVisible(index);
}
}
}
class HireListener implements ActionListener, DocumentListener {
private boolean alreadyEnabled = false;
private JButton button;
public HireListener(JButton button) {
this.button = button;
}
// 必须实现 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);
// StringBuffer temp = new StringBuffer();
// BufferedReader ine;
// BufferedWriter bw = null;
// try {
// File f = new File("Info.csv");
// if (!f.exists())
// f.createNewFile();
// String rec = null;
// ine = new BufferedReader(new FileReader("Info.csv"));
// rec = ine.readLine();
// while (rec != null) {
// temp.append(rec);
// bw = new BufferedWriter(new FileWriter(f, false));
// bw.write(temp.toString());
// rec = ine.readLine();
// }
// ine.close();
// bw.close();
//
// } catch (IOException eo) {
// eo.printStackTrace();
// }
}
// 检测是否在LIST中有重名元素
protected boolean alreadyInList(String name) {
return listModel.contains(name);
}
// 实现DocumentListener接口
public void insertUpdate(DocumentEvent e) {
enableButton();
}
public void removeUpdate(DocumentEvent e) {
handleEmptyTextField(e);
}
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;
}
}
// 实现ListSelectionListener接口
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting() == false) {
if (list.getSelectedIndex() == -1) {
fireButton.setEnabled(false);
} else {
fireButton.setEnabled(true);
}
}
}
public static void main(String[] args) {
frame.setDefaultLookAndFeelDecorated(true);
// 创建一个窗体
frame = new JFrame("登录信息管理系统");
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.dispose();
// 创建一个面版
newContentPane = new ListDemo();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);
// 显示窗体
frame.pack();
frame.setVisible(true);
}
public static JFrame getFrame() {
return frame;
}
public static JComponent getNewContentPane() {
return newContentPane;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -