所以我希望我的主类同时扩展 JFrame 和 JPanel。我该怎么做?
例如:
public class mainClass extends JFrame {
//code here
}
我将如何为同一个类扩展 JPanel?
提前致谢!
如何在主类中扩展 JFrame 和 JPanel?
让我通过一个问题来回答你:
一个儿子可以同时有两个父亲吗?不,因为我们不知道谁是真正的父亲,但经过 DNA 测试,你知道谁是真正的父亲。
在java中,没有DNA测试,很抱歉,因此不允许多重继承。
JFrame
在您的情况下,如果类从and扩展JPanel
,那么这个类、面板或框架的行为会是什么?
Java 不支持多重继承。可能的解决方案包括在扩展 JPanel 的主类中编写一个内部类,然后编写另一个扩展 JFrame 的内部类。您也可以只编写两个单独的(非内部)类来扩展各自的类,因为这是我将使用的常用方法。
你根本做不到。Java 不支持多重继承,因此您不能拥有一个扩展两个不同类的类。
在你的情况下,我不明白为什么你需要一个扩展两者的类,JFrame
因为JPanel
它们是用于不同目的的两种不同的东西。
也许您只需要能够在单个类中定义自己的框架和面板?您可以为此使用内部类:
class MainClass {
static class MyFrame extends JFrame {
..
}
static class MyPanel extends JPanel {
..
}
}
所以我希望我的主类同时扩展 JFrame 和 JPanel。我该怎么做?
你不能,Java 只支持简单继承。
在我看来,如果你不正确使用具体的继承是危险的,因为你可能会破坏对象原则和合同(Liskov Substitution 原则,单一责任原则),难以维护等。
所以真正的问题是为什么你需要扩展JFrame
和JPanel
?
您肯定可以使用其他技术实现您想要做的事情。例如,
作品。
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{
}
}
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) {
}
}