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

时间:2013-07-22 23:41:54

标签: java swing jframe jpanel extends

所以我希望我的主类扩展JFrame和JPanel。我该怎么做?

例如:

public class mainClass extends JFrame {
//code here
}

我如何为同一个类扩展JPanel?

提前致谢!

5 个答案:

答案 0 :(得分:6)

  

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

让我通过提问来回答你:

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

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

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

答案 1 :(得分:3)

Java不支持多重继承。可能的解决方案包括在主类中编写扩展JPanel的内部类,然后编写另一个扩展JFrame的内部类。您也可以编写两个单独的(非内部)类来扩展各自的类,因为这是我将使用的常用方法。

答案 2 :(得分:2)

你根本做不到。 Java不支持多重继承,因此您不能拥有扩展两个不同类的类。

在你的情况下,我不明白为什么你需要一个扩展JFrameJPanel的类,因为它们是用于不同目的的两个不同的东西。

也许您只需要能够在单个类中定义自己的框架和面板?您可以使用内部类:

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

  static class MyPanel extends JPanel {
    ..
  }
}

答案 3 :(得分:2)

  

所以我希望我的主类扩展JFrame和JPanel。我怎么样?   这样做?

你不能,Java只支持简单继承。

在我看来,如果你不使用'正确',具体的继承是危险的因为你可以打破对象原则和合同(Liskov替代原则,单一责任原则),难以维护等。

所以真正的问题是你需要扩展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{

}

}

答案 4 :(得分:1)

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

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

然后将Jpanel设置为JFrame(JFrame包含一个JRootPane作为其唯一的子项。)

class Sample扩展了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) {

   }

}