我有:
public class BaseStationFrame1 extends JFrame
{
JButton activateButton;
JButton deactivateButton;
BaseStation bs;
JTextField networkIdField;
JTextField portField;
public BaseStationFrame1(BaseStation _bs){
bs = _bs;
setTitle("Base Station");
setSize(600,500);
setLocation(100,200);
setVisible(true);
activateButton = new JButton("Activate");
deactivateButton = new JButton("Deactivate");
Container content = this.getContentPane();
content.setBackground(Color.white);
content.setLayout(new FlowLayout());
content.add(activateButton);
content.add(deactivateButton);
networkIdField = new JTextField("networkId : "+ bs.getNetworkId());
networkIdField.setEditable(false);
content.add(networkIdField);
portField = new JTextField("portId : "+ bs.getPort());
portField.setEditable(false);
content.add(portField);}
}
我的问题是,我不希望两个TextField显示在Activate
和Deactivate
按钮的右侧,但在它们下方。我该如何解决这个问题?
答案 0 :(得分:3)
指定您的布局管理器,如下所示:
content.setLayout(new GridLayout(2,2));
那将使用Grid Layout Manager 建立一个包含2列和2行的网格,然后放置组件。
您当前使用的布局管理器FlowLayout仅将内容添加到当前行的末尾。但是,一旦它到达窗格的约束边缘,它就会环绕。 您还应该检查其他布局管理器here
您也可以使用GridBagLayout,但是您必须指定一个GridBagConstraints
对象,然后将其与各个元素一起添加,如下所示:
content.add(networkIdField, gridConstraints);
在链接教程中详细了解。
答案 1 :(得分:-1)
我可以建议你为父组件使用Null Layout吗?
setLayout的(空);
然后使用setBounds(xPos,yPos,Width,Height);
将组件定位在面板上等?
执行此操作将阻止Java的UI管理器管理框架,面板等组件。
这似乎是最简单,最不痛苦的方式。
此致