每当我将JFrame的布局更改为null,而不是实际设置它时,JPanel就永远不会被添加。我不知道为什么,也没有找到任何关于这个主题的足够信息。这是我的JFrame类:
public class Frame extends JFrame
{
public Frame () {
super("frame");
this.setLayout(null);
this.setIconImage(Toolkit.getDefaultToolkit().getImage(Main.class.getProtectionDomain().getClassLoader().getResource("icon.png")));
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(1250, 550);
this.getContentPane().setBackground(Color.GRAY);
}
}
这里是我实例化JFrame:的地方
public static Frame frame;
public static void initialize()
{
frame = new Frame();
CardLayout cardLayout = new CardLayout();
PanelContainer panelContainer = new PanelContainer(cardLayout);
panelContainer.setLayout(cardLayout);
JPanel panel1 = new Panel1();
JPanel panel2 = new Panel2();
panelContainer.add(panel1, "panel1");
panelContainer.add(panel2, "panel2");
cardLayout.show(panelContainer, "panel1");
gui.add(panelContainer, null);
gui.validate();
gui.setVisible(true);
}
这是面板容器类:
public class PanelContainer extends JPanel
{
public PanelContainer(CardLayout cardLayout)
{
super(cardLayout);
this.setVisible(true);
}
}
最后是面板1和2,它们有相同的代码:
public class Panel1 extends JPanel
{
public Panel1 ()
{
super();
this.setBackground(Color.GRAY);
addButtons(this);
}
public static void addButtons(FrontPanel panel)
{
JButton testButton = new JButton(new ImageIcon(Images.TestImage);
testButton (30,30);
testButton (0,0);
panel.addtestButton
}
}
感谢您的时间和帮助!
几个问题:
- 每当你给容器一个空布局时,编码人员就完全负责指定所有添加组件的大小和位置
- 如果不执行此操作,则添加的组件大小为0
- 话虽如此,您几乎不应该使用null布局,因为这会导致GUI不灵活,几乎不可能升级和调试
- 您的代码还显示了对静态内容的过度使用,这表明在尝试创建复杂的GUI之前,您可以先研究Java OOP的概念。创建静态方法和字段会导致代码难以增强、无法继承、难以测试(包括单元测试)
顺便说一句,我看不出你在JFrame中添加了什么。您似乎使用了一个从未声明或初始化的变量gui。您的Frame变量被命名为Frame——gui和Frame是同一个东西吗?您是否为我们误译了代码?
编辑
以及过度使用静态的"一切";我是java的新手,我正在努力更好地使用静态,问题是我不完全知道它的含义
这就是为什么我强烈建议您在尝试创建复杂的GUI之前,先研究Java面向对象编程概念。否则你就有本末倒置的风险。
另一件事是我不使用布局,因为我想对所有东西都有很大的控制权,
这正是布局经理为您所做的。你认为空布局更有效,这标志着你是一个还没有掌握布局经理权力的新手。一旦你这样做了,你就会明白为什么这个网站上大多数关于空布局的类似问题都得到了和我类似的回答。
在oracle文档中,我没有找到一个可以让我这样做的布局。也许你可以给我推荐一些用的东西?
你通常不会只使用一种布局。我经常嵌套JPanel,每个JPanel都使用一个程序员友好的布局管理器,通过这种方式,我能够构建出令人愉快的、易于调整和增强的GUI。至于推荐——我不知道你的程序应该是什么样子,所以我现在不能给出任何具体的推荐。
幸运!