繁体   English   中英

如何在JPanel中左对齐秋千组件

[英]How to left align the swings components in a JPanel

我有以下挥杆组件。 请看图片。 在这里,标签和组合框以及标签和文本字段未正确对齐。 知道是什么原因导致此问题吗?

标签和组合框类别未正确对齐

我在面板中使用GridBagLayout。 然后将诸如label和combobox以及textfield之类的组件添加到面板中。

以下是我使用的代码。

    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来实现的。

领域

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

更好的解决方案是使用GridBagConstraints#insets属性将标签稍稍垫上...

一些填充

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因为setPreferredSize很多时间来计算组件的适当大小,而要使用已经可用的功能(例如JTextFieldsetColumns ),有关一些信息,请参见上面的代码。例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM