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

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

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

最有效的是改变用户界面

 cmb.setUI(new BasicComboBoxUI()); 

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

谢谢。

我做了一些研究,发现了这个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); } } 

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

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

祝你好运,

Jeach!

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