我有以下 Swing 组件。请看图片。 这里标签和组合框以及标签和文本字段没有正确对齐。知道是什么导致了这个问题吗?
我在面板中使用 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
来实现的。某种形式。
您可以将边框设置为 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
因为计算组件的适当大小需要做很多工作,而是利用现有的功能(例如 setColumns
上的 JTextField
),请参阅上面的代码以获取一些示例
关于java - 如何在 JPanel 中左对齐 swings 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36112219/