从JComboBox中删除边框

Gab*_*iel 2 java noborder border jcombobox

你知道从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();
    }
}
Run Code Online (Sandbox Code Playgroud)

public static void main(String[] args) throws Exception {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            new ComboFrame().setVisible(true);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

不要问为什么有人想从组合框中移除边框......我想它没有多大意义,但这就是它的需要,我真的很好奇它是否可以完成.我尝试了几个技巧,但都没有奏效.

最有效的是改变UI

cmb.setUI(new BasicComboBoxUI());
Run Code Online (Sandbox Code Playgroud)

这使得边界消失,但改变了L&F,如果可能的话我需要保留Windows L&F.

谢谢.

Jea*_*ach 5

我做了一些研究,发现了这个bug

我为自己尝试了它,它似乎确实影响了边界.您可能想要自己尝试以下一个或两个代码块.

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

请务必注意,在错误条目的底部,您可以阅读以下内容:

JButton维护它自己的边界,因此JComponent paintBorder()paintComponent()知道 JComboBox边框.

祝好运,

Jeach!