Java,从另一个类添加到jpanel到jframe
我有两个类,如下所示:Java,从另一个类添加到jpanel到jframe,java,swing,Java,Swing,我有两个类,如下所示: public class Board extends JFrame { private JFrame frame; public Board() { JFrame frame = new JFrame(); frame.add(this.createContentPane()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.s
public class Board extends JFrame {
private JFrame frame;
public Board() {
JFrame frame = new JFrame();
frame.add(this.createContentPane());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public JPanel createContentPane (){
JPanel totalGUI = new JPanel();
JPanel mainPanel = new JPanel(new GridLayout(3, 3));
JPanel red = createSquareJPanel(Color.red, 50);
JPanel blue = createSquareJPanel(Color.blue, 50);
mainPanel.add(red);
mainPanel.add(blue);
totalGUI.add(mainPanel);
totalGUI.setOpaque(true);
return totalGUI;
}
private JPanel createSquareJPanel(Color color, int size)
{
Rectangle rect = new Rectangle(color, size);
return rect;
}
}
public class Rectangle extends JPanel {
public Rectangle(Color color, int size) {
this.setBackground(color);
this.setMinimumSize(new Dimension(size, size));
this.setMaximumSize(new Dimension(size, size));
this.setPreferredSize(new Dimension(size, size));
}
}
问题在于,当方法“createSquareJPanel”创建矩形对象时,gridlayout中只有2的第一个元素出现。所以我只看到红色的矩形
如果我将矩形类中的代码放在createSquareJPanel中,并在这里创建一个JPanel,那么它将按照预期工作。我不明白为什么此代码只显示一个元素。您的代码对我来说很好。我已经重新编写了测试,但它是一个相当克隆 此外,类矩形不应该在董事会文件,但我想你,但它在这里的职位。我想知道为什么这个类在扩展JFrame的同时还具有JFrame属性。顺便说一句,那些是正方形的,对吗
我想让你看到totalGUI几乎也是无用的,你可以使用默认的contentPane或你创建的mainPanel,它可以单独工作。默认布局为FlowLayout的事实。1)不要扩展JFrame。Board类不需要扩展任何对象。2) 不要将该类称为矩形。JDK中已经有一个同名的类,所以它很容易混淆。3). 代码在make中运行良好。进行上述更改并从项目中删除所有类文件,以确保没有任何旧文件。1)和2)未更改任何内容。我不确定如何从我的项目中删除所有类文件。如何从计算机上的目录中删除任何文件?好的,我试过了。不幸的是,这并没有改变任何事情。getX()和getY()方法是在组件类中定义的。通过重写这些方法,您将失去默认行为。这是你从经验中学到的东西。我以前做过。JPanel默认是不透明的。不需要调用set不透明(…)方法。不要在github上发布代码。只需在论坛中发布代码供大家查看。我已经测试了JPanel的默认不透明度,你是对的,默认情况下它是不透明的。我一定把杰拉贝尔弄糊涂了。我已经改变了我对avoir误导的回答。我将两者都做,但重点是显示代码。我发现了我的问题,谢谢你的帮助。我不明白为什么,但我在矩形中有一个函数,我认为它无关紧要,但当我删除它时,一切都正常,如下所示:public int getY(){return Y_COORDINATE;},当我将它改为另一个名称时,它似乎是一个名为“getY”的东西,一切正常