java 使用 swing 写一个对列表数据增删改查的页面,要求新增按钮在右上,查询按钮可以通过输入模糊查询条件进行搜索。删除和修改按钮在每一条数据的后面
时间: 2024-03-20 09:39:28 浏览: 125
好的,以下是一个根据你要求修改后的使用Swing编写的增删改查页面的示例代码:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
public class ListDemo extends JFrame implements ActionListener {
private DefaultListModel<String> listModel;
private JList<String> dataList;
private JTextField txtData, txtSearch;
private JButton btnAdd, btnUpdate, btnDelete, btnSearch;
private int selectedIndex;
public ListDemo() {
// 设置窗口标题
setTitle("List Demo");
// 创建一个默认的列表模型
listModel = new DefaultListModel<>();
// 向列表模型中添加一些初始数据
listModel.addElement("Java");
listModel.addElement("Python");
listModel.addElement("C++");
listModel.addElement("JavaScript");
// 创建一个 JList,使用上面的列表模型
dataList = new JList<>(listModel);
// 创建一个 JScrollPane,将 JList 放入其中
JScrollPane scrollPane = new JScrollPane(dataList);
// 创建一个文本框,用于输入数据
txtData = new JTextField(20);
// 创建添加按钮
btnAdd = new JButton("Add");
btnAdd.addActionListener(this);
// 创建更新按钮
btnUpdate = new JButton("Update");
btnUpdate.addActionListener(this);
// 创建删除按钮
btnDelete = new JButton("Delete");
btnDelete.addActionListener(this);
// 创建一个面板,将文本框和按钮放入其中
JPanel inputPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
inputPanel.add(new JLabel("Data:"));
inputPanel.add(txtData);
inputPanel.add(btnAdd);
// 创建一个面板,用于放置查询条件和查询按钮
JPanel searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
txtSearch = new JTextField(20);
searchPanel.add(new JLabel("Search:"));
searchPanel.add(txtSearch);
btnSearch = new JButton("Search");
btnSearch.addActionListener(this);
searchPanel.add(btnSearch);
// 将 inputPanel 和 searchPanel 放入一个面板中
JPanel topPanel = new JPanel(new BorderLayout());
topPanel.add(inputPanel, BorderLayout.EAST);
topPanel.add(searchPanel, BorderLayout.WEST);
// 将 topPanel 和 JScrollPane 放入窗口中
getContentPane().add(topPanel, BorderLayout.NORTH);
getContentPane().add(scrollPane, BorderLayout.CENTER);
// 设置窗口大小和关闭操作
setSize(400, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
// 添加列表项的右键菜单
dataList.addMouseListener(new ListPopupMenu());
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnAdd) {
// 添加数据到列表中
String data = txtData.getText();
if (!data.isEmpty()) {
listModel.addElement(data);
txtData.setText("");
}
} else if (e.getSource() == btnUpdate) {
// 更新列表中的数据
String data = txtData.getText();
if (!data.isEmpty()) {
listModel.setElementAt(data, selectedIndex);
txtData.setText("");
}
} else if (e.getSource() == btnDelete) {
// 删除列表中的数据
int index = dataList.getSelectedIndex();
if (index != -1) {
listModel.remove(index);
txtData.setText("");
}
} else if (e.getSource() == btnSearch) {
// 模糊查询数据
String keyword = txtSearch.getText();
if (!keyword.isEmpty()) {
List<Integer> indexes = new ArrayList<>();
for (int i = 0; i < listModel.getSize(); i++) {
String item = listModel.getElementAt(i);
if (item.contains(keyword)) {
indexes.add(i);
}
}
if (indexes.size() > 0) {
int[] selectedIndexes = new int[indexes.size()];
for (int i = 0; i < indexes.size(); i++) {
selectedIndexes[i] = indexes.get(i);
}
dataList.setSelectedIndices(selectedIndexes);
} else {
JOptionPane.showMessageDialog(this, "No matching data found.");
}
}
}
}
// 列表项的右键菜单
private class ListPopupMenu extends JPopupMenu {
JMenuItem updateItem, deleteItem;
ListPopupMenu() {
updateItem = new JMenuItem("Update");
updateItem.addActionListener(ListDemo.this);
add(updateItem);
deleteItem = new JMenuItem("Delete");
deleteItem.addActionListener(ListDemo.this);
add(deleteItem);
}
@Override
public void show(Component invoker, int x, int y) {
// 显示右键菜单时,先获取当前选中的列表项
int index = dataList.locationToIndex(new Point(x, y));
if (index != -1) {
dataList.setSelectedIndex(index);
selectedIndex = index;
updateItem.setEnabled(true);
deleteItem.setEnabled(true);
} else {
updateItem.setEnabled(false);
deleteItem.setEnabled(false);
}
super.show(invoker, x, y);
}
}
public static void main(String[] args) {
ListDemo demo = new ListDemo();
demo.setVisible(true);
}
}
```
这个示例代码实现了一个包含新增、查询、删除、修改等功能的增删改查页面,其中新增按钮在右上,查询按钮可以通过输入模糊查询条件进行搜索,删除和修改按钮在每一条数据的后面,并且列表项支持右键菜单操作。你可以根据自己的需要进行修改和扩展。
阅读全文