2013-03-23 1 views
-1

JFrame을 확장하는 클래스에 ActionListener가 있습니다. 버튼 클릭시 Main 클래스에서 생성 된 JFrame 확장 객체의 가시성을 설정해야합니다. 이 예제에서 버튼을 클릭하면 해당 버튼이있는 기존 객체가 보이지 않게되고 다른 JFrame 객체가 보이게됩니다.Java의 다른 클래스에있는 객체의 메소드 실행

ActionListener는 하나의 JFrame 클래스 안에 있으며, 객체는 Main 클래스 내에 만들어집니다. JFrame 클래스 내부의 ActionListener에서 Main 클래스 내의 해당 특정 메서드를 실행하려면 어떻게해야합니까?

이미 setVisibility 메서드가 있지만 다른 클래스 안에있는 개체에서이 메서드를 실행하도록 ActionListener를 지시 할 수있는 방법이 명확하지 않습니다. 메인 클래스에서

: (액션 청취자 내부) 오브젝트 1 클래스에서

Object1 jFrameObj1 = new Object1(); 

Object2 jFrameObj2 = new Object2(); 

: 모든

if(event.getSource() == button){ 

    jFrameObj1.setVisible(false); 

    jFrameObj2.setVisible(true); 

} 
+2

SSCCE을 게시하시기 바랍니다. –

+1

끔찍한 사용자 인터페이스 디자인 인 사용자에게 JFrames를 쏟아내는 또 다른 GUI입니다. 더 나은 해결책은 간단히 말하면 안됩니다. 대신 CardLayout을 사용하여 뷰를 스왑합니다. 또한 [다중 JFrame 사용, 좋음/나쁨 연습]을 확인하십시오 (http://stackoverflow.com/a/9554657/522444) –

+0

감사합니다. 나는 CardLayout을 조사 할 것이다. 그 충고에 감사드립니다. – user2202767

답변

0

첫째, 당신은 이름 지정 규칙 자바를 존중하고, 더 나은 이름을 선택해야 귀하의 클래스와 변수에 대한. 개체의 메서드를 호출하려면이 개체에 대한 참조가 필요합니다. 그래서 메인 메서드는 첫 번째 프레임에 두 번째 프레임에 대한 참조를 전달해야 :

Object2 frame2 = new Object2(); 
Object1 frame1 = new Object1(frame2); 

을 그런 다음 오브젝트 1 클래스 :

private Object2 frameToDisplayWhenButtonIsClicked; 

public Object2(frameToDisplayWhenButtonIsClicked) { 
    this.frameToDisplayWhenButtonIsClicked; 
} 

... 

public void actionPerformed(ActionEvent e) { 
    setVisible(false); 
    frameToDisplayWhenButtonIsClicked.setVisible(true); 
} 
+0

당신이 말할 수 있듯이, 나는 자바 초보자입니다. 코드 예제에 대해 자세히 설명해 주시겠습니까? 나는 그것을 구현하려고 시도하고 올바르게 이해하고 있는지 확신 할 수 없다. – user2202767

+0

당신이 말하는 것은 이것입니까? 주 : SplashScreen splash = 새 SplashScreen(); JFrame : 비공개 SplashScreen splash; \t 공개 SplashScreen (스플래시) { \t \t this.splash; \t} – user2202767

+1

질문에 일부 코드를 게시했습니다. 요청한대로 수행하도록이 코드를 리팩터링했습니다. 객체, 생성자 및 필드가 무엇인지 이해하지 못한다면 아직 스윙을 사용하지 말아야합니다. 기본적인 것을 먼저 배우십시오. –

관련 문제