[英]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
很多时间来计算组件的适当大小,而要使用已经可用的功能(例如JTextField
的setColumns
),有关一些信息,请参见上面的代码。例子
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.