我在将
观察到的行为如下:
JComboBox
组件放置在GroupLayout
中时遇到了一种奇怪的行为。我已将代码简化为下面的最小示例,仅包含一个由GroupLayout
布局的JComboBox
。观察到的行为如下:
- 当框架比展开的组合框列表(带有虚拟条目a、b、c)小时,单击组合框上的向下箭头会正确打开它。
- 当我调整框架大小以大于展开的组合框列表时,展开的组合框列表未打开!
- 当JComboBox的父窗口太小时,javax.swing.PopupFactory会创建一个HEAVY_WEIGHT_POPUP组件。
- 当父窗口足够大时,将创建LIGHT_WEIGHT_POPUP。
- 该行为与GroupLayout或其某些副作用明显相关,因为我尝试过的任何其他布局管理器都可以正常工作。
- 在GroupLayout中使用addGap()时,问题会有所改变,即JComboBox不显示的窗口大小会发生变化。
import java.awt.BorderLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JRootPane;
public class DummyUI_cbdiagnosis extends javax.swing.JPanel {
private javax.swing.JComboBox cbCategory;
public DummyUI_cbdiagnosis() {
initComponents();
}
private void initComponents() {
cbCategory = new JComboBox();
cbCategory.setModel(new javax.swing.DefaultComboBoxModel(new String[] {
"a", "b", "c" }));
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addGroup(
layout.createSequentialGroup().addComponent(cbCategory,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)));
layout.setVerticalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addGroup(
layout.createSequentialGroup().addComponent(cbCategory)
));
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JRootPane rootPane = frame.getRootPane();
rootPane.setLayout(new BorderLayout());
DummyUI_cbdiagnosis panel = new DummyUI_cbdiagnosis();
rootPane.add(panel, BorderLayout.NORTH);
frame.pack();
frame.setVisible(true);
}
}