Java 空布局jframe上的Cardlayout

Java 空布局jframe上的Cardlayout,java,swing,layout-manager,cardlayout,null-layout-manager,Java,Swing,Layout Manager,Cardlayout,Null Layout Manager,每当我将JFrame的布局更改为null,而不是实际设置它时,就不会添加JPanel。我不知道为什么,我还没有找到关于这个话题的足够信息。以下是我的JFrame类: public class Frame extends JFrame { public Frame () { super("frame"); this.setLayout(null); this.setIconImage(Toolkit.getDefaultToolkit().getImage(Main.c

每当我将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 OOPs概念。创建静态方法和字段会导致代码难以增强、无法继承且难以测试(包括单元测试)
顺便说一句,我看不出在JFrame中添加了什么内容。您似乎正在使用一个从未声明或初始化的变量gui。您的Frame变量名为Frame——gui和Frame可以是同一事物吗?你是不是把密码给我们翻译错了


编辑

…至于过度使用静态“一切”;我是java新手,我正在尝试更好地使用静态,问题是我不完全了解它的含义

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

另一件事是我不使用布局,因为我想控制一切

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

在oracle文档中,我没有找到一个可以让我这样做的布局。也许你能建议我用点什么

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

祝你好运

几个问题:

  • 无论何时为容器提供空布局,编码人员都将完全负责指定所有添加组件的大小和位置
  • 如果不这样做,则添加的组件的大小为0
  • 话虽如此,您几乎不应该使用空布局,因为它会导致GUI不灵活,几乎不可能升级和调试
  • 您的代码还显示了对静态一切的过度使用,这表明在尝试创建复杂的GUI之前,您最好先研究Java OOPs概念。创建静态方法和字段会导致代码难以增强、无法继承且难以测试(包括单元测试)
顺便说一句,我看不出在JFrame中添加了什么内容。您似乎正在使用一个从未声明或初始化的变量gui。您的Frame变量名为Frame——gui和Frame可以是同一事物吗?你是不是把密码给我们翻译错了


编辑

…至于过度使用静态“一切”;我是java新手,我正在尝试更好地使用静态,问题是我不完全了解它的含义

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

另一件事是我不使用布局,因为我想控制一切

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

在oracle文档中,我没有找到一个可以让我这样做的布局。也许你能建议我用点什么

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


祝你好运

对不起,我翻译错了,gui应该是框架。对此表示抱歉,至于静态“一切”的过度使用;我是java新手,我正在尝试更好地使用静态,问题是我不完全了解它的含义。另一件事是,我不使用布局,因为我希望对一切都有很大的控制,在oracle文档中,我没有找到一个可以让我这样做的布局。也许你能建议我用点什么?谢谢你的帮助!对不起,我翻译错了,gui应该是框架。对此表示抱歉,至于静态“一切”的过度使用;我是java新手,我正在尝试更好地使用静态,问题是我不完全了解它的含义。另一件事是,我不使用布局,因为我希望对一切都有很大的控制,在oracle文档中,我没有找到一个可以让我这样做的布局。也许你能建议我用点什么?谢谢你的帮助!