【问题标题】:Button expanding with no layout无布局的按钮展开
【发布时间】:2013-08-18 18:33:47
【问题描述】:

我正在开发一个 GUI,我决定要构建没有布局的 GUI。相反,我使用的是 setBounds() 函数。当我只放置一个按钮时一切正常,但是当我放置另一个按钮时,他正在扩展并填充孔屏幕。我仍然可以单击 TextField 但我看不到它(当我单击某个位置时它出现了)。这是我的代码:

//Graphical part
private JFrame loginFrame;
private JTextField userField;
private JButton send;
private JButton reg;
private JTextField passField;
public void graphics() {
    setRegister();
    int sizeX=120,sizeY=20,bSizeX=80,bSizeY=sizeY;
    int locationX=80,locationY=40;
    loginFrame=new JFrame("Login");
    loginFrame.setVisible(true);
    loginFrame.setSize(300,200);
    userField=new JTextField("");
    passField=new JTextField("");
    loginFrame.add(userField);
    loginFrame.add(passField);
    userField.setBounds(locationX, locationY, sizeX, sizeY);
    passField.setBounds(locationX, locationY+10+sizeY, sizeX, sizeY);
    send=new JButton("Send");
    send.addActionListener(this);
    loginFrame.add(send);
    send.setBounds(locationX+40,10+2*(locationY+10), bSizeX, bSizeY);
    reg=new JButton("Register");
    reg.setBounds(0, 0, bSizeX, bSizeY);
    loginFrame.add(reg);
    //reg.addActionListener(this);
}

【问题讨论】:

  • 错误在于没有将布局管理器与设计用于它们一起使用的框架一起使用。组件具有默认布局管理器,如果您不考虑这一点,则会导致冲突。真的,使用绝对位置的唯一原因是告诉自己这是一个多么大的错误。
  • 最后总是像pack()/setVisible()这样调用,一旦你完成向容器中添加组件,它就会以更好的方式实现它的大小。

标签: java swing jbutton null-layout-manager


【解决方案1】:

默认情况下,JFrame 将 BorderLayout 作为布局管理器,因此您的代码确实使用它。如果你想在没有布局的情况下测试你的代码,你需要将它指定为 null:

 loginFrame.setLayout(null);

【讨论】:

  • +1,指定需要调用setLayout(null)。虽然确实指定了 OP,但要阅读 Absolute Positioning 的第一段,这就清楚了为什么不鼓励这种方法的原因:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多