每当我将JFrame的布局更改为null,而不是实际设置它时,JPanels永远不会被添加。我不确定为什么,我没有找到关于这个主题的足够信息。这是我的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 :(得分:5)
几个问题:
顺便说一句,我没有看到你在JFrame中添加任何内容的位置。而你似乎正在使用一个永远不会声明或初始化的变量gui。你的Frame变量被命名为frame - can gui和frame是同一个东西吗?你有没有为我们编写代码?
修改
......以及过度使用静态“一切”;我是java的新手,我正在努力改善静态的使用,问题是我不完全知道它的含义。
这就是为什么我强烈建议您在尝试创建复杂的GUI之前研究Java面向对象的编程概念。否则你有可能将推车放在马前。
另一件事是我不使用布局,因为我想要对所有内容进行大量控制,
布局经理正是为您做的。你认为null布局效果更好,这标志着你是一个尚未掌握布局管理器功能的新手。一旦你这样做,你就会明白为什么大多数关于这个网站上的空布局的类似问题会得到与我类似的响应。
查看oracle文档我没有找到可以让我这样做的布局。也许你可以建议我使用一些东西?
您通常不会只使用一种布局。我经常使用程序员友好的布局管理器来嵌套JPanels,并且通过这种方式,我可以构建令人满意的并且易于调整和增强GUI。至于建议 - 我不知道你的程序应该如何看,所以我现在无法给出任何具体的记录。
运气!