删除 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);
}
});
}
不要问为什么有人想要从组合中删除边框......我想这没有多大意义,但这就是它想要的方式,我真的很好奇是否可以做到。我尝试了几种技巧,但没有一个奏效。
最有效的方法是更改 UI
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);
}
}
值得注意的是,在错误条目的底部,您可以阅读以下内容:
JButton 维护它自己的边框,因此 JComponent 绘制边框() 和 绘制组件() 不知道 JComboBox 边框。
祝你好运,
杰奇!
其他提示
如果您想使用Windows L&F,你可以做cmd.setUI(new WindowsComboBoxUI());
如果,但是,希望能够使用任何L&F,你可能会更好使用Jeach提出的解决方案。
不隶属于 StackOverflow