2014-03-03 94 views
4

所以基本上我需要有2个窗口,在第一个窗口中(最初为空)JList,在第二个窗口中我有JTable。一旦我双击JTable中的一个项目,它需要添加一个相应的项目到JList(我还不确定这将是什么,也许是我双击的第一个单元格的字符串值)。此外,如果我的JList中有任何项目,那么表格中的相应值必须以不同的颜色高亮显示,因此我双击的行应设置为红色。此外,如果我在某个时候从JList中删除了一个项目,它应该将表中相应行的颜色更改为黑色。在多个窗口中处理事件

我只是想知道是否有人可以给我建议,以设计这样的应用程序的最佳方法,特别是(如果没有人可以建议任何其他),使用观察员,而不是一些getter方法更高效?我还没有尝试与观察员合作,但如果他们在这种情况下是更好的选择,那么我很乐意尝试和学习。

感谢

+0

import java.util.EventListener; import java.util.EventObject; import javax.swing.event.EventListenerList; class MyEvent extends EventObject { public MyEvent(Object source) { super(source); } } interface MyEventListener extends EventListener { public void myEventOccurred(MyEvent evt); } class MyClass { protected EventListenerList listenerList = new EventListenerList(); public void addMyEventListener(MyEventListener listener) { listenerList.add(MyEventListener.class, listener); } public void removeMyEventListener(MyEventListener listener) { listenerList.remove(MyEventListener.class, listener); } void fireMyEvent(MyEvent evt) { Object[] listeners = listenerList.getListenerList(); for (int i = 0; i < listeners.length; i = i+2) { if (listeners[i] == MyEventListener.class) { ((MyEventListener) listeners[i+1]).myEventOccurred(evt); } } } } public class Main { public static void main(String[] argv) throws Exception { MyClass c = new MyClass(); c.addMyEventListener(new MyEventListener() { public void myEventOccurred(MyEvent evt) { System.out.println("fired"); } }); } } 

一个从拉// stackoverflow.com/a/9554657/878469)。 – predi

回答

2

你将不得不在创建监听器监听这些点击事件使用观察员。尝试编写用于侦听来自一个Swing组件的相关事件的代码,并将相应的更改设置为其他Swing组件。当你从JList中删除一个项目时,你可能也可以对Table进行更改,而不必从JList中监听添加事件(不知道是否有一个)。