將JComboBox
組件放在GroupLayout
中時,我遇到了一種奇怪的行爲。我已經將代碼縮減到了下面的最小示例中,其中只有一個JComboBox
由GroupLayout
排列。JComboBox與GroupLayout搭配不好
所觀察到的行爲如下:
- 當幀比所述膨脹組合框列表的情況下(與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);
}
}
如果您導入包名稱,則不必顯式調用包名稱... – Mordechai