2014-03-03 93 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中監聽添加事件(不知道是否有一個)。