2013-07-22 28 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只支持简单继承。

而且在我看来,具体的继承是危险的,如果你不使用“正常”因为你可以打破对象原则和合同(里氏替换原则,单一职责原则),难以维持等

所以真正的问题是为什么你需要延长JFrameJPanel

你当然可以实现你想用另一种技术做什么。例如,

组成。

public class MyClass{ 

private JPanel panel; 
private JFrame frame; 

} 

如果你需要覆盖的JPanel例如paintComponent一些特定的行为,你可以做(​​匿名类)

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

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

} 

} 

或进行内部类

public class MyClass{ 

private class MyJPanel extends JPanel{ 

} 

} 
6

如何在主类中扩展JFrame和JPanel?

让我问一个问题回答你:

儿子能有在两个父亲同一时间?不,因为我们不知道谁是真正的父亲,但经过DNA测试后,你知道谁是真正的父亲。

在java中,没有DNA测试,对不起,因此,不允许多重继承。

在你的情况下,如果这个类从JFrameJPanel扩展,这个类,面板或框架的行为是什么?

+1

+1为dna搞笑哈哈xD – nachokk

+1

+1尼斯解释兄弟:) – 2013-07-23 23:30:22

+0

谢谢你们xD – Azad

1

JFrame和JPanel是类,所以你不能直接同时继承两个类。

首先创建JPanel并将组件添加到它。

然后设置的JPanel来的JFrame(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) { 

    } 

}