java用列表框Jlist<Message>实现,可以根据消息状态进行筛选信息,可以根据消息信息内容部分匹配进行筛选,可以删除选中信息,可以删除全部信息。
时间: 2024-02-22 07:54:47 浏览: 78
好的,以下是用JList和DefaultListModel实现信息筛选和删除的代码:
```
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 MessageList extends JPanel implements ActionListener {
private DefaultListModel<Message> listModel;
private JList<Message> messageList;
private JComboBox<String> statusComboBox;
private JTextField filterTextField;
private JButton deleteButton;
private JButton deleteAllButton;
public MessageList() {
super(new BorderLayout());
listModel = new DefaultListModel<>();
messageList = new JList<>(listModel);
JScrollPane scrollPane = new JScrollPane(messageList);
scrollPane.setPreferredSize(new Dimension(400, 250));
JPanel controlPanel = new JPanel();
statusComboBox = new JComboBox<>(new String[]{"All", "Read", "Unread"});
statusComboBox.addActionListener(this);
controlPanel.add(statusComboBox);
filterTextField = new JTextField(20);
filterTextField.addActionListener(this);
controlPanel.add(filterTextField);
deleteButton = new JButton("Delete");
deleteButton.addActionListener(this);
controlPanel.add(deleteButton);
deleteAllButton = new JButton("Delete All");
deleteAllButton.addActionListener(this);
controlPanel.add(deleteAllButton);
add(scrollPane, BorderLayout.CENTER);
add(controlPanel, BorderLayout.SOUTH);
}
public void addMessage(Message message) {
listModel.addElement(message);
}
public void filterMessages() {
String status = (String) statusComboBox.getSelectedItem();
String filterText = filterTextField.getText();
List<Message> filteredList = new ArrayList<>();
for (int i = 0; i < listModel.size(); i++) {
Message message = listModel.getElementAt(i);
if ((status.equals("All") || status.equals(message.getStatus()))
&& (filterText.isEmpty() || message.getContent().contains(filterText))) {
filteredList.add(message);
}
}
messageList.setListData(filteredList.toArray(new Message[0]));
}
public void deleteSelectedMessage() {
int index = messageList.getSelectedIndex();
if (index >= 0) {
listModel.remove(index);
}
}
public void deleteAllMessages() {
listModel.removeAllElements();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == statusComboBox || e.getSource() == filterTextField) {
filterMessages();
} else if (e.getSource() == deleteButton) {
deleteSelectedMessage();
} else if (e.getSource() == deleteAllButton) {
deleteAllMessages();
}
}
}
```
在这个类中,我们使用了 `DefaultListModel` 来存储消息列表,并将其传递给 `JList`。我们还在界面上添加了一个下拉列表框、一个文本框、一个删除选中消息的按钮和一个删除全部消息的按钮。
在 `filterMessages` 方法中,我们根据消息状态和消息内容部分匹配进行消息筛选,并将筛选结果设置为 `JList` 的数据。在 `deleteSelectedMessage` 方法中,我们删除选中的消息。在 `deleteAllMessages` 方法中,我们删除全部消息。在 `actionPerformed` 方法中,我们根据不同的事件源来调用不同的方法。
阅读全文