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