당신 상태 : 내가있는 ComponentListener을 작성으로 붙어있다
JScrollPane 이제는 내 코드를 사용하여 수동으로 실행해야합니다. 내가 어떻게 해? JComboBox 이벤트가 발생하면이 코드를 실행해야합니다. 즉, 사용자가 연도 또는 무언가를 선택하면이 코드가 실행됩니다.
JComboBox 선택 이벤트에 응답하는 표준 방법은 ItemListener 또는 ActionListener를 사용하는 것입니다.
많은 것을 기반으로 해고해야 할 ComponentListener가 있습니다. 이것들은 데이터를 다른 화면으로 전달하는 무거운 데이터베이스 호출이므로 ItemStateChanged 안에 전체 코드 세트를 사용하지 않을 것입니다.
나에게 추천하는 위의 문장에는 아무 것도 표시되지 않습니다. 인위적으로 ComponentListener를 실행하는 것과 같은 험담을 만듭니다. 당신이 더 강한 이유가 있다면, 우리에게 말해야 할 것입니다. 그렇지 않으면 정식적인 대답은 이것을하기위한 것이 아니라 위에서 언급 한 표준 청취자를 사용하는 것입니다.
프로그램의 구조가 대략 MVC 디자인과 비슷하다고 가정하면 콤보 상자 선택이 Control 클래스를 트리거하여 모델을 변경하고 모델 변경이 중요하거나 뷰, 구성 요소의 여러 구성 요소에 큰 영향을 미칠 수 있습니다 그 자신은 모델의 상태를 듣고 있습니다. 그리고 저는 이것이 당신이하고 싶은 일이라고 생각합니다.
편집
당신의 상태 :
나는이 수동입니다 해고하려고하는 이유. JTabbedPane 있습니다. 5 개의 탭이 있습니다. 모든 탭에는 데이터베이스에서 데이터를 가져 오는 테이블이 있습니다. 테이블에 데이터를 공급하는 데 사용하는 SQL 쿼리는 매우 무겁고 일부는 5-6 개의 테이블을 함께 결합합니다. 그래서 5 가지 SQL 쿼리 (5 개 테이블 모두)를 한꺼번에 실행할 수없는 이유입니다. bcs는 실패 할까 봐 걱정됩니다. 구성 요소 수신기가 있으면 현재 표시 테이블에 적합한 SQL 코드 만 호출합니다. SQL 코드는 매개 변수를 취합니다. 연령. 그것이 바로 콤보 박스가있는 이유입니다. 물론
은 물론 프로그램, 그리고 당신은 당신이 원하는 방법을 구성 할 수 있지만 내라면, 나는 주로 내가 더 쉽게 구성 부분을 디버깅 할 수있는 MVC 구조를 향해 기어 내 거라고 고립되어 조롱 등을 할 수 있어야합니다.물론 Comptnent에 getComponentListeners()
라고 전화를 걸어 자신 만의 ComopnentEvent를 만든 다음 각 수신기의 componentXXX(ComponentEvent cEvt)
메서드를 호출하여 실행하면 문제가 발생할 수 있지만 프로그램을 테스트하고 업그레이드하는 데 어려움을 겪고 어려움을 겪을 수 있습니다. 어느 구성 요소 알림 방법을 사용 하시겠습니까? JVM에서 같은 방법으로 적절하게 실행될 때 수행해야 할 프로그램은 무엇입니까?
모델과보기를 함께 사용하고 있는지 궁금합니다. 전체 프로그램을 뒷받침하고 거기에서 일하는 비즈니스 논리 인 모델을 추상화하는 것이 더 나을지 궁금합니다. 모델에 알림을 보내야하고 테이블이 현재 표시되고 있다는 것을 알고 있어야하며 마찬가지로 컨트롤에서 연도가 바뀔 때이를 알립니다. 그런 다음 모델은 물론 데이터베이스의 백그라운드 스레드에서 업데이트를 요청할 수 있으며 컨트롤에 의해 완료되었다고 생각합니다. 이 데이터는 모델로 다시 전송됩니다. 뷰에는 변경 사항에 대한 알림을받을 모델의 리스너가 있으며 현재 표시된 테이블의 표시가 변경됩니다.
GUI 기반 수신기를 사용해야하는 경우 PropertyChangeListener를 사용해야합니다. 각 GUI 구성 요소는이 수신기에 대해 선천적 인 지원을하고 있기 때문에 자신의 바인딩 된 속성을 만들어 충돌을 일으키지 않는 수신기를 만들게됩니다 다른 GUI 동작 또는 상태.
processComponentShown() 메서드를 정의하고이를 수신기에서 직접 호출하고 필요한 경우 직접 호출합니다. – StanislavL
@StanislavL : 나는 당신을 얻지 못했습니다 ... 당신은 'ComponentShown' 내부의 코드를 메소드로 옮기는 것을 의미합니까? 나는 직접적인 방법을 찾고있다. –
질문 [XY 문제] (http://mywiki.wooledge.org/XyProblem)에서 "이 코드를 어떻게 수정해야합니까?"라는 질문을하는 것처럼 들린다. 진정한 해결책은 완전히 다른 접근 방식을 사용하는 것입니다. 아마도 현재 해결하려는 방법보다는 문제를 해결하려는 전체적인 문제를 말해주는 것이 더 나을 것입니다. –