2016-06-04 8 views
0

저는 Swing을 사용하는 Java 응용 프로그램을 개발 중입니다. 나는이처럼되는 JDialog를 확장하는 클래스가 있습니다JDialog (또는 일반적으로 다른 클래스)를 확장하는 클래스의 인터페이스를 만드는 방법

지금 그것을위한 인터페이스를 만들 수있는 방법 (권장) 무엇
public class customDialog extends JDialog { 
    //Custom buttons listeners etc. 
} 

? 내가 작성합니다

public interface customDialogInterface { 
    //Custom methods signatures 
} 

을 한 후 사용 나는이 JDialog의 메소드에 액세스 할 수 없습니다 내 코드에서 customDialogInterface를 사용할 때 customDialog에 있지만,이 방법으로 "customDialogInterface을 구현". 기타 정보 JDialog는 클래스이므로 인터페이스에서 확장 할 수 없습니다. 게다가 JDialog가 구현 한 인터페이스로 customDialogInterface를 확장 할 수 없습니다. 그 중 하나가 패키지로 보호되어 있기 때문입니다.

(내가 가정 한) 사례를 진행하는 올바른 방법은 무엇입니까?


UPDATE 1 : 내 질문을 재구성 더 설명하려고합니다. "구체적인 클래스가 아닌 인터페이스를 사용하는 프로그램"을 알려주는 프로그래밍 원칙이 있습니다. 그것을 바탕으로 내 CustomDialog에 대한 인터페이스를 어떻게 만들 수 있습니까? 내가 할 경우 CustomDialog를 사용하는 코드보다

public interface CustomDialogInterface { 
    public void doA(); 
    public void doB(); 
} 

나는이 :

CustomDialogInterface myDialog = new CustomDialog(); 
myDialog.doA(); //OK 
myDialog.doB(); //OK 
myDialog.setVisible(true); //ERROR 

UPDATE 2 : 다시 내 질문을 업데이트하기로 결정 답변을 내놓고 것은이 있다는 것 때문에 그것은 분명하지 않습니다. 아직 실제 코드가 아니기 때문에 정보가 많지 않습니다. 이론적 인 질문 일뿐입니다. 등, 내 정보와 JDialog를 필요 내 응용 프로그램에서

  1. 을 필드를 내가 그것을 어떻게 얻을 수 있습니다 : 아직 가능한 해결책을 발견하는 경우 또한 나는 다른 형태로 다시 여기에 쓰기? 클래스 정의 :

    클래스 MyImplementation이 JDialog를 확장 이제

  2. { 공공 DOA (문자열 TXT를) { 가 //이 내 구현 } 의 구체적인 방법은}, 나는 규칙을 따르십시오 좋은 프로그래밍 "구현에 의한 것이 아니라 인터페이스에 의한 프로그램"그래서 내 사용자 정의 대화 상자에 대한 인터페이스가 필요합니다.

    interface InterfaceForMyDialog { public doA (String txt); }

  3. 는 Obiously 클래스 MyImplementation 난 그냥 추가 위의 의사를 변경할 수 있도록 인터페이스를 구현해야하고

    클래스 MyImplementation이되는 JDialog는 InterfaceForMyDialog { 공공 DOA (문자열 TXT) {// 이것은 를 구현 확장 구현 이제 내 구현 } }

  4. 하는 방법의 특정 마침내 나는이 같은 (main 메소드의 어딘가에 가정 해 봅시다) 외부 코드에서 나의 새로운 대화 어딘가를 사용해야합니다 :

    ... InterfaceForMyDialog myDialogInterface = new MyImplementation (...);

질문 : 어떻게 위의 코드를 작성해야합니다 "DOA (문자열 TXT를)"방법을 사용하여 내 사용자 정의 대화 상자로 텍스트를 설정 한 다음 대화 자체를 보여? 이 구조체를 사용하는 것은 불가능하다고 생각하며 추상 클래스를 사용하여 해결책을 찾았습니다 (아래 참조). 내가 틀렸거나 더 좋은 해결책이 있다면 여기에 적어주세요.

+0

무엇이 오류입니까? 복사하여 여기에 붙여 넣으십시오. 컴파일 오류입니까? – arcy

+0

[상속] (https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)을 살펴보십시오.귀하의 제한된 정보를 바탕으로 나는 인터페이스를 구현하고 대화 상자를 확장하지 말 것을 제안합니다. Andrew가 설명한대로 – MadProgrammer

답변

2

하나의 클래스 만 확장 할 수 있다는 것이 맞습니다. JDialog를 확장하고 있기 때문에 0 개 이상의 인터페이스를 구현할 수 있지만 다른 클래스를 확장 할 수는 없습니다. 사용자 인터페이스는 두 가지 방법이있는 경우

:

public interface customDialogInterface 
{ 
    public void doA(); 
    public int doB(); 
} 

그런 다음 클래스는 한 customDialog이 방법을 doA()doB()을 가지고로

public class customDialog extends JDialog implements customDialogInterface 

을 가질 수 있습니다.

메모 : 규칙에 따라 클래스 이름과 인터페이스 이름은 모두 대문자로 시작합니다. CustomDialogCustomDialogInterface을 사용하면 전 세계의 Java 프로그래머가 코드를 더 쉽게 이해할 수 있습니다.

+0

EDIT : 나는 코멘트를 쓰지 않고 원래의 질문을 업데이트했습니다. – user2572526

+0

SO에 관해 질문 할 때 "ERROR"또는 "does not work"라고 말하지 마십시오. 오류를 복사하여 질문에 붙여 넣으십시오. 그것이 작동하지 않는다고 말하며, 컴파일 또는 실행 시간 (여기에서 해 보았습니다) 등을 말하십시오. 인터넷에있는 우리 모두가 방금 처음으로 문제의 일부를 보게 될 것이라고 상상해보십시오. . CustomDialog의 인스턴스가 있고 JDialog를 확장하고 boolean으로 setVisible을 호출하면 그 시점에서 컴파일 오류가 없어야합니다. – arcy

+0

안녕하세요 arcy, 실제 오류는 아니며 단지 예일뿐입니다. CustomDialogInterface에서 setVisible (true) 메서드를 호출하려고하지만 그 메서드가 JDialog의 메서드이고 인터페이스에 정의되어 있지 않기 때문에 그럴 수 없습니다. BTW 내가 인터페이스를 대신 추상 클래스로 CustomDialogInterface 만들 soultion을 발견했다. 내 질문에 어떤 모습을 보아 주셔서 감사합니다. 최고, – user2572526

0

좋아 해결책을 찾았습니다. 인터페이스로 CustomDialogInterface를 선언하는 대신 JDialog를 확장하는 추상 클래스로 선언했습니다. 그런 다음이 추상 클래스를 구현을 제공하는 클래스로 확장합니다. 더 나은 해결책이 있다면 알려주십시오!

+1

이것이 더 나은지 아닌지는 당신이 우리에게 말하지 않은 것에 달려 있습니다. JDialog를 확장하고 인터페이스를 구현하는 것이 완벽하게 가능합니다. 오류가있는 경우 오류가 무엇이고 언제 표시되는지 알려주십시오. 여기에 일부는 코드 실행에 대한 주장이기 때문에 충분한 정보를 제공하기에는 충분하지 않은 생각이 종종 있습니다. – arcy