2014-03-03 3 views
4

기본적으로 2 개의 창을 가지고 있어야하고 처음에는 (처음에는 비어 있음) JList이 있고, 2 번째에는 JTable이 있습니다. JTable에서 항목을 두 번 클릭하면 JList에 해당 항목을 추가해야합니다 (아직 두 번 클릭 한 행의 첫 번째 셀의 문자열 값). 또한 JList에 항목이있는 경우 테이블의 해당 값을 다른 색으로 강조 표시해야하므로 두 번 클릭 한 행을 빨간색으로 설정해야합니다. 또한 어떤 지점에서 JList에서 항목을 제거하면 표의 해당 행 색상이 검은 색으로 바뀌어야합니다.여러 창에서 이벤트 처리

저는 누군가가 저와 같은 응용 프로그램을 설계하는 최선의 접근법에 대한 조언을 줄 수 있는지 궁금합니다. (아무도 제안 할 수없는 경우) 일부 게터 방법보다는 관찰자를 사용하는 것이 더 효과적일까요? 나는 아직 관찰자들과 일하는 것을 시도하지 않았지만,이 경우 더 나은 선택이된다면 나는 시험하고 배울 수있어서 기쁩니다.

감사

+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"); } }); } } 

에서 당겨졌다 그 // https://9554657/878469). – predi

답변

2

당신은 당신이 클릭 이벤트를 수신하는 수신기를 만들 때 관찰자를 사용해야 할 것입니다. 하나의 Swing 구성 요소에서 관련 이벤트를 수신하는 코드를 작성하고 해당 변경 사항을 다른 Swing 구성 요소에 설정하십시오. JList에서 항목을 제거 할 때 JList에서 add 이벤트를 수신 할 필요없이 표를 변경할 수도 있습니다 (단 하나라도있는 경우 확실하지 않음).

1

관찰자 패턴 :

"하나의 개체가 상태를 변경할 때, 모든 종속 통보 및 자동으로 갱신되도록 개체 간의 일대 종속성을 정의한다."

일반적으로 다음과 같은 코드를 사용합니다. 당신이 좋은 디자인, [여러 프레임, 좋은/나쁜] (HTTP에 대해 물어 때문에

http://www.java2s.com/Tutorial/Java/0260__Swing-Event/CreatingaCustomEvent.htm