在null布局jframe上的Cardlayout

时间:2014-09-11 01:18:58

标签: java swing layout-manager cardlayout null-layout-manager

每当我将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 
}
}

感谢您的时间和帮助!

1 个答案:

答案 0 :(得分:5)

几个问题:

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

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


修改

  

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

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

  

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

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

  

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

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

运气!