将JTextField放在Java GUI的JFrame中

时间:2011-12-08 20:42:03

标签: java swing jframe jtextfield layout-manager

我有:

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显示在ActivateDeactivate按钮的右侧,但在它们下方。我该如何解决这个问题?

2 个答案:

答案 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管理器管理框架,面板等组件。

这似乎是最简单,最不痛苦的方式。

此致