首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FlowLayout使标签居中?

FlowLayout使标签居中?
EN

Stack Overflow用户
提问于 2020-06-07 21:17:20
回答 2查看 357关注 0票数 0

我正在用FlowLayout制作一个表格。表单的GUI如下所示:

代码语言:javascript
复制
Name: <textField>
    Age: <textfiedl>
    Gender: Male[] Female[]
Email: <textField>

对于性别,选项是单选按钮。如你所见,年龄和性别的标签应该居中。如何使用FlowLayout完成此操作

EN

回答 2

Stack Overflow用户

发布于 2020-06-07 21:22:04

如果整个表单是使用BoxLayout创建的,其中一个是面向BoxLayout.PAGE_AXIS的,那么如果表单的每一条“线”都是一个使用FlowLayout的JPanel,那么默认情况下它们持有的组件应该居中,因为JPanel使用new FlowLayout(FlowLayout.CENTER, 5, 5)作为其默认布局(实际上它使用new FlowLayout(),但此构造函数的默认值如上所述--居中方向,水平和垂直间距为5)。

另一种选择是使用填充,并为每行上的组件更改约束的GridBagLayout和weighty属性。

例如:

代码语言:javascript
复制
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.*;

public class LayoutExample extends JPanel {
    private static final long serialVersionUID = 1L;
    private JTextField ageField = new JTextField(10);
    private JTextField emailField = new JTextField(10);
    private ButtonGroup sexBtnGroup = new ButtonGroup();
    private JRadioButton maleBtn = new JRadioButton("Male");
    private JRadioButton femaleBtn = new JRadioButton("Female");

    public LayoutExample() {
        JPanel agePanel = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5));
        agePanel.add(new JLabel("Age:"));
        agePanel.add(ageField);

        sexBtnGroup.add(maleBtn);
        sexBtnGroup.add(femaleBtn);;
        JPanel sexSelectionPanel = new JPanel();
        sexSelectionPanel.add(new JLabel("Select Sex:"));
        sexSelectionPanel.add(maleBtn);
        sexSelectionPanel.add(femaleBtn);

        JPanel emailPanel = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5));
        emailPanel.add(new JLabel("Email:"));
        emailPanel.add(emailField);

        int gap = 10;
        setBorder(BorderFactory.createEmptyBorder(gap, gap, gap, gap));
        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
        add(agePanel);
        add(Box.createVerticalStrut(5));
        add(sexSelectionPanel);
        add(Box.createVerticalStrut(5));
        add(emailPanel);        
    }

    // make it stretch horizontally to see placement
    @Override
    public Dimension getPreferredSize() {
        Dimension superSize = super.getPreferredSize();
        int width = (3 * superSize.width) / 2;
        int height = superSize.height;
        return new Dimension(width, height);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }

    private static void createAndShowGui() {
        LayoutExample mainPanel = new LayoutExample();
        JFrame frame = new JFrame("LayoutExample");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(mainPanel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }
}

示例2使用GridBagLayout:

代码语言:javascript
复制
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import javax.swing.*;

public class LayoutExample2 extends JPanel {
    private static final long serialVersionUID = 1L;
    private JTextField ageField = new JTextField(10);
    private JTextField emailField = new JTextField(10);
    private ButtonGroup sexBtnGroup = new ButtonGroup();
    private JRadioButton maleBtn = new JRadioButton("Male");
    private JRadioButton femaleBtn = new JRadioButton("Female");

    public LayoutExample2() {

        JPanel sexSelectPanel = new JPanel(new GridLayout(1, 0, 5, 5));
        sexBtnGroup.add(maleBtn);
        sexSelectPanel.add(maleBtn);
        sexBtnGroup.add(femaleBtn);
        sexSelectPanel.add(femaleBtn);

        int gap = 10;
        setBorder(BorderFactory.createEmptyBorder(gap, gap, gap, gap));
        setLayout(new GridBagLayout());

        add(new JLabel("Age:"), createGbc(0, 0));
        add(ageField, createGbc(1, 0));

        add(new JLabel("Sex:"), createGbc(0, 1));
        add(sexSelectPanel, createGbc(1, 1));

        add(new JLabel("Email:"), createGbc(0, 2));
        add(emailField, createGbc(1, 2));
    }

    private static GridBagConstraints createGbc(int x, int y) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.weightx = 1.0;
        gbc.weighty = 1.0;
        int ins = 4;
        gbc.insets = new Insets(ins, ins, ins, ins);
        gbc.fill = GridBagConstraints.HORIZONTAL;
        return gbc;
    }

    // make it stretch horizontally to see placement
    @Override
    public Dimension getPreferredSize() {
        Dimension superSize = super.getPreferredSize();
        int width = (4 * superSize.width) / 3;
        int height = superSize.height;
        return new Dimension(width, height);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }

    private static void createAndShowGui() {
        LayoutExample2 mainPanel = new LayoutExample2();
        JFrame frame = new JFrame("LayoutExample");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(mainPanel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2020-06-07 21:44:07

这是一种方法(可能有很多种方法)。标题边框中的布局详细信息。

注意:对于任何与选择数字有关的事情,最好为用户提供一个微调控件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62245923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档