java - 如何在 JPanel 中左对齐 swings 组件

标签 java swing layout-manager gridbaglayout

我有以下 Swing 组件。请看图片。 这里标签和组合框以及标签和文本字段没有正确对齐。知道是什么导致了这个问题吗?

The category Label and combo box are not aligned properly

我在面板中使用 GridBagLayout。然后将标签、组合框和文本字段等组件添加到面板中。

以下是我使用的代码。

    srchCategoryLbl = new JLabel("Category");
    categoryCmb = new JComboBox<>();
    categoryCmb.setPreferredSize(dimensionTxt);
    categoryCmb.setBounds(0, 0, 0, 0);

    srchProductCodeLbl = new JLabel("Product Code");
    productCodeTxt = new JTextField();
    productCodeTxt.setPreferredSize(dimensionTxt);

    srchProductDescLbl = new JLabel("Product Desc");
    productDescTxt = new JTextField();
    productDescTxt.setPreferredSize(dimensionTxt);

    searchBtn = new JButton("Search");

    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.anchor = GridBagConstraints.WEST;
    searchPanel.add(srchCategoryLbl, gbc);

    gbc.gridx = 0;
    gbc.gridy = 1;
    searchPanel.add(categoryCmb, gbc);

    gbc.gridx = 1;
    gbc.gridy = 0;
    searchPanel.add(srchProductCodeLbl, gbc);

    gbc.gridx = 1;
    gbc.gridy = 1;
    searchPanel.add(productCodeTxt, gbc);

    gbc.gridx = 2;
    gbc.gridy = 0;
    searchPanel.add(srchProductDescLbl, gbc);

    gbc.gridx = 2;
    gbc.gridy = 1;
    searchPanel.add(productDescTxt, gbc);

    gbc.gridx = 3;
    gbc.gridy = 1;
    searchPanel.add(searchBtn, gbc);

最佳答案

当您选择其中一个字段时,您可以看到 MacOS 在该字段周围放置了一个“焦点”矩形,这是通过使用自定义 Border 来实现的。某种形式。

Fields

您可以将边框设置为 null (或其他),但这可能会以意想不到的方式影响其他外观和感觉,并会以他们可能不欣赏的方式改变用户体验

更好的解决方案是使用 GridBagConstraints#insets属性来稍微填充标签...

Some Padding

JLabel srchCategoryLbl = new JLabel("Category");
JComboBox<Object> categoryCmb = new JComboBox<>();
categoryCmb.setPrototypeDisplayValue("This is a really long test string");

JLabel srchProductCodeLbl = new JLabel("Product Code");
JTextField productCodeTxt = new JTextField(20);

JLabel srchProductDescLbl = new JLabel("Product Desc");
JTextField productDescTxt = new JTextField(20);

JButton searchBtn = new JButton("Search");

setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
Insets labelInsets = new Insets(0, 4, 0, 4);
Insets fieldInsets = new Insets(0, 0, 0, 0);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = labelInsets;
add(srchCategoryLbl, gbc);

gbc.gridx = 0;
gbc.gridy = 1;
gbc.insets = fieldInsets;
add(categoryCmb, gbc);

gbc.gridx = 1;
gbc.gridy = 0;
gbc.insets = labelInsets;
add(srchProductCodeLbl, gbc);

gbc.gridx = 1;
gbc.gridy = 1;
gbc.insets = fieldInsets;
add(productCodeTxt, gbc);

gbc.gridx = 2;
gbc.gridy = 0;
gbc.insets = labelInsets;
add(srchProductDescLbl, gbc);

gbc.gridx = 2;
gbc.gridy = 1;
gbc.insets = fieldInsets;
add(productDescTxt, gbc);

gbc.gridx = 3;
gbc.gridy = 1;
add(searchBtn, gbc);

这又是跨平台 UI 的不幸问题之一,因为您需要设计一种方法来根据当前平台确定需要多少插入。

我还强烈建议您避免使用 setPreferredSize因为计算组件的适当大小需要做很多工作,而是利用现有的功能(例如 setColumns 上的 JTextField ),请参阅上面的代码以获取一些示例

关于java - 如何在 JPanel 中左对齐 swings 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36112219/

相关文章:

java - Sphinx4 的 SphinxTrain 的示例配置/属性 xml 文件

java - 如何为 JAX-WS Web 服务客户端设置超时?

java - OpenCV 3.0.0 FaceDetect 样本失败

JAVA客户端-服务器游戏

java - BorderLayout 中的 JLabel 居中,行尾有一个按钮

java - 如何设置 JButton 的大小?

java - 使用自己实现的链表时出错

java - 为什么没有为某些语言环境设置 WM_NAME 原子

java - Repaint() 和 PaintComponent() 未正确更新

Java Swing GUI - 界面困惑 - 字段未显示