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

m528fe3b  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(282)

由于我将不详细讨论的原因,我仅限于使用流布局管理器。这个明显的问题和我保持组件在同一条线上的必要性是,当组件超过面板边缘时,它会将组件进一步推向框架下方。
有没有方法可以用来对齐组件,以确保标签及其对应的文本字段显示在同一行上?

bihw5rsg

bihw5rsg1#

如果我理解正确,主要问题是标签和输入是分开的(标签在右边,输入在左边的下一行)。
解决这个问题的一个方法是将标签和输入字段分组到一个子面板中,然后将这个子面板添加到使用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

相关问题