Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 空对象的JComboBox.addItem_Java_Swing_Jcombobox - Fatal编程技术网

Java 空对象的JComboBox.addItem

Java 空对象的JComboBox.addItem,java,swing,jcombobox,Java,Swing,Jcombobox,嗨 我有一个JComboBox,我正在向其中添加自定义对象项。但有时添加的对象是空的。因此,当组合框中有空项时,它会折叠并变得非常薄。但一旦人口增加,就变成了北方的高度。有人能建议semething保持JComboBox的高度,即使没有添加项目或空项目 私有最终JComboBox组合字段=新JComboBox(); comboField.removeAllItems(); comboField.addItem(getFirstConfig()); comboField.addItem(getSe

我有一个JComboBox,我正在向其中添加自定义对象项。但有时添加的对象是空的。因此,当组合框中有空项时,它会折叠并变得非常薄。但一旦人口增加,就变成了北方的高度。有人能建议semething保持JComboBox的高度,即使没有添加项目或空项目

私有最终JComboBox组合字段=新JComboBox(); comboField.removeAllItems(); comboField.addItem(getFirstConfig()); comboField.addItem(getSecConfig())


谢谢

您是指下拉列表还是框本身。如果只是盒子,你就不能在上面设定一个最小高度吗

更新: 根据你的评论,我做了一些实验。根据所使用的布局管理器,零部件尺寸的行为会有所不同。一种可能的工作方式是将组合框包装在流布局面板中,并设置首选大小,如下所示。如果这仍然没有帮助,请告诉我你的布局管理器是什么

代码(可执行演示):

import javax.swing.*;
导入java.awt.event.*;
导入java.awt.*;
公共类JComboxTest{
私有静态jcombox组合;
私有静态字符串[]labelStrs=新字符串[5];
私有静态void createAndShowGUI(){
最终JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
对于(int i=0;i<5;i+=1){
labelStrs[i]=“我是label”+i;
}
combo=新的JComboBox(labelStrs);
//------------------------------------------------
combo.setPreferredSize(新维度(100,20));
//------------------------------------------------
JButton remove=新JButton(“remove”);
remove.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
combo.removeAllItems();
frame.repaint();
}
});
JButton add=新JButton(“add”);
add.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
对于(int i=0;i<5;i+=1){
复合添加剂(标签[i]);
}
frame.repaint();
}
});
面板容器=新面板();
面板包装器=新面板();
面板btns=新面板();
container.setLayout(新的FlowLayout());
container.add(组合);
添加(容器);
添加(删除);
btns.add(add);
frame.getContentPane().setLayout(新的BorderLayout());
frame.getContentPane().add(包装器,BorderLayout.CENTER);
frame.getContentPane().add(BTN,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
公共静态void main(字符串[]args){
javax.swing.SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
createAndShowGUI();
}
});
}   
}

您可以通过设置最小大小来实现,但正确的值取决于字体。您可以猜测该值,也可以在
FontMetrics
的帮助下从
addNotify
设置该值

我通常发现,通过将第一项设置为类似于:“--Select Config--”或者,如果您知道没有可供选择的项:“--no Configs Available--”

更新:

因为您不能使用占位符,所以您的备选方案取决于正在使用的布局管理器和LAF

这主要相当于设置JComponent的最小和/或首选大小。这是不精确的,但我通常使用
GridBagLayout
,并使用这种方法获得了很好的结果:

    @Override
    public void addNotify() {
        super.addNotify();
        combo.setMinimumSize(atLeast(combo.getMinimumSize(), 100, 20));
        combo.setPreferredSize(atLeast(combo.getPreferredSize(), 100, 20));
    }

    private Dimension atLeast(Dimension d, int minWidth, int minHeight) {
        d.width = Math.max(minWidth, d.width);
        d.height = Math.max(minHeight, d.height);
        return d;
    }

将100,20替换为适合您的最小值。

刚刚添加了一个检查,如果Jcombobox的选项为空,则添加一个空字符串“”。这样可以防止组合框崩溃

我从未见过“薄”组合框,即使是空模型。发布您的SSCCE()以演示问题。您是否碰巧使用了GroupLayout?我同意添加--SelectConfig--不幸的是,在客户端指导原则下不使用任何此类选项。。使用DefaultComboxModel是一种可能的解决方案吗??这是实际的JComboBox本身,当它的选项为空时会崩溃。也尝试设置最低高度,但也不起作用。
    @Override
    public void addNotify() {
        super.addNotify();
        combo.setMinimumSize(atLeast(combo.getMinimumSize(), 100, 20));
        combo.setPreferredSize(atLeast(combo.getPreferredSize(), 100, 20));
    }

    private Dimension atLeast(Dimension d, int minWidth, int minHeight) {
        d.width = Math.max(minWidth, d.width);
        d.height = Math.max(minHeight, d.height);
        return d;
    }