所以我目前正在尝试创建一个简单的 Javaspace 主题板作为辅助项目,为此我有一个基本界面,允许将主题和消息从文本字段添加到两个单独DefaultListModel
的 s 中,我的问题是:
Jlist1
从使用选择侦听器中选择元素时,有什么方法可以打开Jlist2
该特定元素的实例?然后必须显示主题的消息Jlist1
,选择另一个主题Jlist1
将具有相同的效果,反之亦然。
对于缺少代码,我深表歉意,这是由于与小孩、果汁和我的旧系统有关的技术问题。
所以我目前正在尝试创建一个简单的 Javaspace 主题板作为辅助项目,为此我有一个基本界面,允许将主题和消息从文本字段添加到两个单独DefaultListModel
的 s 中,我的问题是:
Jlist1
从使用选择侦听器中选择元素时,有什么方法可以打开Jlist2
该特定元素的实例?然后必须显示主题的消息Jlist1
,选择另一个主题Jlist1
将具有相同的效果,反之亦然。
对于缺少代码,我深表歉意,这是由于与小孩、果汁和我的旧系统有关的技术问题。
这个怎么样?您听取第一个列表中的选择,并基于此更改第二个列表的模型:
public class AbcFrame extends javax.swing.JFrame {
// map linking items in the first lists with items in the second list
private final Map<String,ListModel> map = new HashMap<>();
private javax.swing.JList jList1;
private javax.swing.JList jList2;
public AbcFrame() {
initComponents(); // create and place the lists in the frame
map.put("itemA", new MyListModel(Arrays.asList("a_1", "a_2", "a_3")));
map.put("itemB", new MyListModel(Arrays.asList("b_1", "b_2")));
jList1.setModel(new MyListModel(Arrays.asList("itemA", "itemB")));
// when the selection of the first list changes, change the model of the second list
jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
String item = (String) jList1.getSelectedValue();
ListModel model2 = map.get(item);
jList2.setModel(model2);
}
});
}
private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {
String item = (String) jList1.getSelectedValue();
ListModel model2 = map.get(item);
jList2.setModel(model2);
}
// a simple list model wrapping a java.util.List
private static class MyListModel extends AbstractListModel {
private final java.util.List<String> items;
public MyListModel(java.util.List<String> items) {
this.items = items;
}
@Override
public int getSize() {
return items.size();
}
@Override
public Object getElementAt(int index) {
return items.get(index);
}
}
}