2

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

例如:

public class mainClass extends JFrame {
//code here
}

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

提前致谢!

4

5 回答 5

6

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

让我通过一个问题来回答你:

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

在java中,没有DNA测试,很抱歉,因此不允许多重继承。

JFrame在您的情况下,如果类从and扩展JPanel,那么这个类、面板或框架的行为会是什么?

于 2013-07-23T00:07:59.430 回答
3

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

于 2013-07-22T23:45:35.210 回答
2

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

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

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

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

  static class MyPanel extends JPanel {
    ..
  }
}
于 2013-07-22T23:45:18.773 回答
2

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

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

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

所以真正的问题是为什么你需要扩展JFrameJPanel

您肯定可以使用其他技术实现您想要做的事情。例如,

作品。

public class MyClass{

private JPanel panel;
private JFrame frame;

}

如果您需要覆盖某些特定行为,例如paintComponent在 JPanel 中,您可以这样做(匿名类)

{
//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{

}

}
于 2013-07-23T00:03:08.723 回答
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) {

   }

}

于 2013-07-23T00:20:22.317 回答