使用流布局管理器保持组件水平对齐

时间:2017-09-04 22:18:37

标签: java user-interface layout

由于我不会详细讨论的原因,我仅限于使用流布局管理器。这个问题的明显问题以及我将组件保持在同一条线上的必要性是它将组件推向框架的更远处,因为它们超越了面板边缘。

我是否可以使用方法对齐组件以确保标签及其相应的文本字段显示在同一行?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,主要问题是标签和输入是分开的(右侧的标签,左侧下一行的输入)。

该问题的一个解决方案是将标签和输入字段分组到子面板中,并将此子面板添加到使用FlowLayout的主面板。

下面的代码说明了这种技术:

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 *
 * @author acampos
 */
public class Main02 {

    public static void main(String[] args) {
        JFrame jFrame = new JFrame();
        JPanel mainPanel = new JPanel();

        JPanel dynamicPanel;
        JLabel dynamicLabel;
        JTextField dynamicInput;

        for (int i = 0; i < 5; i++) {
            // Creates the panel that will contain the Label AND the Input
            dynamicPanel = new JPanel();
            // Creates the dynamic label
            dynamicLabel = new JLabel("Label " + i + ": ");
            // Creates the dynamic text field
            dynamicInput = new JTextField(10);
            // Adds the label and the text field to the dynamic panel
            dynamicPanel.add(dynamicLabel);
            dynamicPanel.add(dynamicInput);
            dynamicPanel.setSize(100, 100 );
            // Adds the dynamic panel to the main panel <-- HERE IS THE KEY
            mainPanel.add(dynamicPanel);
        }

        // Set the FlowLayout to the MAIN PANEL, so the dynamic panels
        // will 'flow' but the label and the text field will be kept together
        mainPanel.setLayout(new FlowLayout(3));
        // Adds the main panel (which contains the dynamic panels) to the main frame

        jFrame.add( mainPanel );
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setVisible(true);
        jFrame.setSize(600, 150);
        jFrame.setResizable(true);
    }
}

当您运行此代码时(是的,您可以运行它)并更改jFrame的大小,您会看到标签和输入不再分开。

注意:对于下一个问题,我强烈建议您与社区分享您的代码。这是https://stackoverflow.com/help/how-to-ask

上更详细的好习惯
相关问题