我有以下摆动组件。请看图像。 这里标签和组合框和标签以及文本字段没有正确对齐。知道是什么导致了这个问题吗?
我在面板中使用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);
答案 0 :(得分:2)
当您选择其中一个字段时,您可以看到MacOS放置一个&#34;焦点&#34;字段周围的矩形,这是通过使用某种自定义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的一个不幸问题之一,因为您需要设计一种方法,根据当前平台,您可以根据这种方法确定需要多少插入内容。 / p>
我还强烈建议您避免使用setPreferredSize
,因为在计算组件的适当大小时会考虑很多,而是使用已经可用的功能(例如setColumns
上的JTextField
,请参阅上面的代码了解一些示例