Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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中删除边框_Java_Border_Jcombobox_Noborder - Fatal编程技术网

Java 从JComboBox中删除边框

Java 从JComboBox中删除边框,java,border,jcombobox,noborder,Java,Border,Jcombobox,Noborder,您知道用Java从JComboBox中删除边框的方法吗?我尝试以下代码 public class ComboFrame extends JFrame { public ComboFrame() { JPanel container = new JPanel(); JComboBox cmb = new JComboBox(new String[] { "one", "two" }); cmb.setBorder(BorderFactory

您知道用Java从JComboBox中删除边框的方法吗?我尝试以下代码

public class ComboFrame extends JFrame {
    public ComboFrame() {
        JPanel container = new JPanel();

        JComboBox cmb = new JComboBox(new String[] { "one", "two" });
        cmb.setBorder(BorderFactory.createEmptyBorder());
        container.add(cmb);

        getContentPane().add(container);
        pack();
    }
}

不要问为什么有人想从combobx中删除边框。。。我想这没什么意义,但这就是我们想要的,我真的很好奇这是否可以实现。我试了好几招,但都不管用

最有效的方法是使用

cmb.setUI(new BasicComboBoxUI());
这会使边界消失,但会改变L&F,如果可能,我需要保留Windows L&F


谢谢。

我做了一些研究,发现

我自己试过了,但似乎确实影响了边境。您可能希望自己尝试以下一个或两个代码块

for (int i = 0; i < combo.getComponentCount(); i++) 
{
    if (combo.getComponent(i) instanceof JComponent) {
        ((JComponent) combo.getComponent(i)).setBorder(new EmptyBorder(0, 0,0,0));
    }


    if (combo.getComponent(i) instanceof AbstractButton) {
        ((AbstractButton) combo.getComponent(i)).setBorderPainted(false);
    }
}
for(int i=0;i
请务必注意,在bug条目的底部,您可以阅读以下内容:

JButton维护自己的边框,因此JComponent paintBorder()和paintComponent()不知道JComboBox边框

祝你好运


杰赫

如果您想使用windows L&F,可以执行
cmd.setUI(new WindowsComboBoxUI())

但是,如果您想使用任何L&F,最好使用Jeach提出的解决方案。

谢谢Jeach!这确实适用于默认L&F(金属)。但在Windows上,使用L&F系统,它仍然不想工作……6年后,感谢您的回答!我试图更改可编辑jcombobox的颜色,但只能在将其编辑器设置为金属类型后进行更改。然而,这导致了一个丑陋的边界包围了盒子。使用JComponent循环清除了框,背景设置得很好
for (int i = 0; i < combo.getComponentCount(); i++) 
{
    if (combo.getComponent(i) instanceof JComponent) {
        ((JComponent) combo.getComponent(i)).setBorder(new EmptyBorder(0, 0,0,0));
    }


    if (combo.getComponent(i) instanceof AbstractButton) {
        ((AbstractButton) combo.getComponent(i)).setBorderPainted(false);
    }
}