3

你知道有什么方法可以从 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();
    }
}

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

不要问为什么有人要从组合框上删除边框......我想这没有太大意义,但这就是它想要的方式,我真的很好奇它是否可以完成。我尝试了几种技巧,但都没有奏效。

最有效的是用

cmb.setUI(new BasicComboBoxUI());

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

谢谢。

4

2 回答 2

5

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

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

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);
    }
}

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

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

祝你好运,

杰奇!

于 2009-04-22T15:34:58.127 回答
0

如果您想使用 Windows L&F,您可以这样做cmd.setUI(new WindowsComboBoxUI()); 。但是,如果您希望能够使用任何 L&F,则最好使用 Jeach 提出的解决方案。

于 2009-08-25T14:18:32.220 回答