在null布局jframe上的Cardlayout

0 java swing layout-manager null-layout-manager cardlayout

每当我将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);
}
Run Code Online (Sandbox Code Playgroud)

}

这是我实例化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);
}
Run Code Online (Sandbox Code Playgroud)

这是面板容器类:

public class PanelContainer extends JPanel
{
public PanelContainer(CardLayout cardLayout)
{
    super(cardLayout);
    this.setVisible(true);
  }
}
Run Code Online (Sandbox Code Playgroud)

最后这里是面板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 
}
}
Run Code Online (Sandbox Code Playgroud)

感谢您的时间和帮助!

Hov*_*els 5

几个问题:

  • 每当您为容器提供null布局时,编码器就会完全负责指定所有添加组件的大小和位置.
  • 如果不这样做,添加的组件大小为0.
  • 说完这个之后,你几乎不应该使用null布局,因为它导致GUI不灵活,几乎无法升级和调试.
  • 您的代码还显示了静态过度使用静态内容,建议您在尝试创建复杂的GUI之前学习Java OOP概念.创建静态方法和字段会导致代码难以增强,无法继承并且难以测试,包括单元测试.

顺便说一句,我没有看到你在JFrame中添加任何内容的位置.而你似乎正在使用一个永远不会声明或初始化的变量gui.你的Frame变量被命名为frame - can gui和frame是同一个东西吗?你有没有为我们编写代码?


编辑

......以及过度使用静态"一切"; 我是java的新手,我正在努力改善静态的使用,问题是我并不完全知道它的含义.

这就是为什么我强烈建议您尝试创建复杂的GUI 之前研究Java面向对象的编程概念.否则,您可能会将购物车放在马前.

另一件事是我不使用布局,因为我想要对所有东西进行大量控制,

这正是布局经理为您所做的事情.你认为null布局效果更好,这标志着你是一个尚未掌握布局管理器功能的新手.一旦你这样做,你就会明白为什么这个网站上关于null布局的大多数类似问题会得到与我类似的响应.

在oracle文档中查找我没有找到可以让我这样做的布局.也许你可以建议我使用一些东西?

您通常不会只使用一个布局.我经常使用程序员友好的布局管理器来嵌套JPanels,并且通过这种方式,我可以构建令人满意的并且易于调整和增强GUI.至于建议 - 我不知道你的程序应该如何,所以我目前无法提供任何具体的记录.

运气!