JComboBox 仅当它有一个项目时才显示
JComboBox showing only if it has a single item
我有一个 JPanel
,里面有一个 CardLayout
和一个 JComboBox
。它们充满了从 JTable
中获取的数据。如果 JComboBox 只有一个项目,它显示得很好,但如果我用多个项目填充它,它就不会显示。
JPanel intervalPanel = new JPanel;
CardLayout intervalLayout = new CardLayout();
intervalPanel.setLayout(intervalLayout);
JComboBox intervalComboBox = new JComboBox();
for (int i = 0; i < table.getRowCount(); i++) {
String name = (String) table.getValueAt(i, 0);
intervalComboBox.addItem(name);
JPanel p = new JPanel();
p.setName(name);
p.add(intervalComboBox);
p.add(new JLabel(name));
intervalPanel.add(p, name);
}
一个 Swing 组件只能有一个父组件。
p.add(intervalComboBox);
上面的语句不断从前一个面板中删除组合框并将其添加到当前面板。
but if I fill it with more than one it doesn't show.
所以它不显示的原因是因为它只在最后一张卡片上可见,但您目前看到的是第一张卡片。
更好的解决方案是不将组合框添加到 CardLayout 中的面板。相反,您的主面板应该使用 BorderLayout
。那么基本逻辑是这样的:
JPanel main = new JPanel( new BorderLayout() );
JComboBox comboBox = new JComboBox(...);
main.add(comboBox, BorderLayout.PAGE_START);
JPanel card = new JPanel( intervalLayout );
main.add(card, BorderLayout.CENTER);
frame.add( main );
然后您只需根据需要将子面板添加到 "card" 面板。
阅读 Swing 教程中关于 How to Use CardLayout 的部分,了解使用上述设计概念的完整工作演示。
我有一个 JPanel
,里面有一个 CardLayout
和一个 JComboBox
。它们充满了从 JTable
中获取的数据。如果 JComboBox 只有一个项目,它显示得很好,但如果我用多个项目填充它,它就不会显示。
JPanel intervalPanel = new JPanel;
CardLayout intervalLayout = new CardLayout();
intervalPanel.setLayout(intervalLayout);
JComboBox intervalComboBox = new JComboBox();
for (int i = 0; i < table.getRowCount(); i++) {
String name = (String) table.getValueAt(i, 0);
intervalComboBox.addItem(name);
JPanel p = new JPanel();
p.setName(name);
p.add(intervalComboBox);
p.add(new JLabel(name));
intervalPanel.add(p, name);
}
一个 Swing 组件只能有一个父组件。
p.add(intervalComboBox);
上面的语句不断从前一个面板中删除组合框并将其添加到当前面板。
but if I fill it with more than one it doesn't show.
所以它不显示的原因是因为它只在最后一张卡片上可见,但您目前看到的是第一张卡片。
更好的解决方案是不将组合框添加到 CardLayout 中的面板。相反,您的主面板应该使用 BorderLayout
。那么基本逻辑是这样的:
JPanel main = new JPanel( new BorderLayout() );
JComboBox comboBox = new JComboBox(...);
main.add(comboBox, BorderLayout.PAGE_START);
JPanel card = new JPanel( intervalLayout );
main.add(card, BorderLayout.CENTER);
frame.add( main );
然后您只需根据需要将子面板添加到 "card" 面板。
阅读 Swing 教程中关于 How to Use CardLayout 的部分,了解使用上述设计概念的完整工作演示。