gpt4 book ai didi

java - 空布局 jframe 上的 Cardlayout

转载 作者:行者123 更新时间:2023-12-01 17:05:26 24 4
gpt4 key购买 nike

每当我将 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。
  • 话虽如此,您几乎不应该使用空布局,因为它会导致 GUI 不灵活并且几乎无法升级和调试。
  • 您的代码还显示出对静态所有内容的严重过度使用,这表明您在尝试创建复杂的 GUI 之前最好先研究一下 Java OOP 概念。创建静态方法和字段会导致代码难以增强、无法继承并且难以测试(包括单元测试)。

顺便说一句,我没有看到您在 JFrame 中添加了任何内容。而且您似乎正在使用一个从未声明或初始化的变量 gui。你的 Frame 变量被命名为frame —— gui 和frame 可以是同一个东西吗?您是否为我们错误转录了代码?

<小时/>

编辑

...and as for the overuse of static "everything"; I'm new to java and I'm trying to get better at the use of static, the problem is I don't entirely know the meaning of it.

这就是为什么我强烈建议您在尝试创建复杂的 GUI 之前先学习 Java 面向对象的编程概念。否则就有本末倒置的风险。

Another thing is I don't use a layout because I want alot of control over everything,

这正是布局管理器为您所做的事情。您认为空布局效果更好,这标志着您是一个尚未掌握布局管理器功能的新手。一旦您这样做了,您就会明白为什么此网站上有关空布局的大多数类似问题都会得到与我类似的答复。

looking in the oracle docs I didn't find a layout that would let me do that. Maybe you could suggest something for me to use?

您通常不会只使用一种布局。我经常嵌套 JPanel,每个 JPanel 都使用程序员友好的布局管理器,这样就能够构建令人愉悦且易于调整和增强的 GUI。至于建议——我不知道你的程序应该是什么样子,所以目前我无法给出任何具体的建议。

运气好!

关于java - 空布局 jframe 上的 Cardlayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25777521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com