2013-07-22 2 views
2

그래서 메인 클래스가 JFrame과 JPanel을 확장하기를 원합니다. 어떻게하면 좋을까요?메인 클래스에서 JFrame과 JPanel을 확장하는 방법은 무엇입니까?

public class mainClass extends JFrame { 
//code here 
} 

어떻게 또한 같은 클래스 인 JPanel을 확장 할 것입니다 : 예를 들어

?

미리 감사드립니다.

+2

당신은 그것을 할 수 없습니다 설정합니다. Jpanel과 jframe은 둘 다 클래스이고 java는 클래스의 다중 상속을 지원하지 않습니다. 단 하나의 클래스와 많은 인터페이스. –

+3

** 프레임이나 다른 최상위 컨테이너를 확장하지 마십시오. 대신 하나의 인스턴스를 만들고 사용하십시오. 기능을 추가하거나 변경하는 경우에만'JPanel'을 확장하십시오. 그 중 하나를하고 있습니까? 그렇다면 구체적으로 무엇입니까? –

답변

3

Java는 다중 상속을 지원하지 않습니다. 가능한 해결책은 JPanel을 확장하는 메인 클래스에서 내부 클래스를 코딩 한 다음 JFrame을 확장하는 또 다른 내부 클래스를 코딩하는 것입니다. 또한 각각의 클래스를 확장하는 두 개의 분리 된 (내부가 아닌) 클래스를 코딩 할 수 있습니다. 이는 내가 일반적으로 사용하는 방식입니다.

2

간단히 할 수 없습니다. Java는 다중 상속을 지원하지 않으므로 두 개의 다른 클래스를 확장하는 클래스를 가질 수 없습니다.

귀하의 상황에서 다른 목적으로 사용되는 두 가지이기 때문에 JFrameJPanel을 모두 확장하는 클래스가 필요한 이유는 알 수 없습니다.

아마 당신은 하나의 클래스 안에 자신의 프레임과 패널을 정의 할 수 있어야할까요?

class MainClass { 
    static class MyFrame extends JFrame { 
    .. 
    } 

    static class MyPanel extends JPanel { 
    .. 
    } 
} 
2

그래서 메인 클래스에서 JFrame과 JPanel을 확장하고 싶습니다. 어떻게하면 이 작업을 수행합니까?

에는 Java가 단순 상속 만 지원할 수 없습니다.

그리고 당신은 객체의 원칙과 계약 (Liskov 교체 원칙, 단일 책임 원칙)을 깰 수있는 원인이 '제대로'사용하지 않는 경우 내 의견으로는 콘크리트 상속 그래서 등

을 유지하기 어려운 위험하다 진짜 질문은 JFrameJPanel을 확장해야하는 이유입니다.

다른 기술을 사용하여 원하는 것을 달성 할 수 있습니다. 예 :

작문.

public class MyClass{ 

private JPanel panel; 
private JFrame frame; 

} 

당신은 방법 내부 클래스

public class MyClass{ 

private class MyJPanel extends JPanel{ 

} 

} 
6

에게 당신이 할 수있는 JPanel의 예를 paintComponent에 대한 몇 가지 특정 행동 (익명 클래스)

{ 
//in some part 
panel = new JPanel(){ 

@Override 
public void paintComponent(Graphics gr){ 
    super.paintComponent(gr); 
    //your code 
} 

} 

} 

을 무시하거나해야 할 경우 메인 클래스에서 JFrame과 JPanel을 확장합니까?

나에게 질문을하여 답변을 보자 :

아들이 두 아버지 같은 시간을 가질 수 있습니까?아뇨, 누가 진짜 아버지인지 모르기 때문에 DNA 검사를 통해 누가 진짜인지를 알 수 있습니다.

자바에서는 DNA 테스트가 없으므로 죄송합니다. 따라서 다중 상속이 허용되지 않습니다.

귀하의 경우, 클래스가 JFrameJPanel에서 확장 된 경우이 클래스, 패널 또는 프레임의 비헤이비어는 어떻게됩니까?

+1

dna 재미있는 롤 xD – nachokk

+1

+1 좋은 설명 bro :) –

+0

너희들 xD – Azad

1

JFrame과 JPanel은 클래스이므로 동시에 두 클래스를 직접 상속 할 수 없습니다.

먼저 JPanel을 만들고 구성 요소를 추가합니다.

그런 다음 JFrame의에 JPanel의을 (JFrame의이 JRootPane가 유일한 자식로서 포함됩니다.)

클래스 샘플 JFrame의 {

Sample(){ 
    JPanel content = new JPanel(); 
    conent.add(comp1); 
    conent.add(comp2); 
    ................. //comp1,comp2 are your JButton or JTextBox or JLabel ...etc.. 
    ................. 
    setContentPane(content); 
    setVisible(true); 
    } 


    public static void main(String[] args) { 

    } 

}를 확장

관련 문제