【问题标题】:Remove border from JComboBox从 JComboBox 中删除边框
【发布时间】:2010-10-21 02:02:42
【问题描述】:

你知道有什么方法可以从 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。

谢谢。

【问题讨论】:

    标签: java border jcombobox noborder


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我做了一些研究,发现this 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 边框。

      祝你好运,

      杰奇!

      【讨论】:

      • 谢谢杰奇!这确实适用于默认的 L&F(金属)。但是在windows上,用系统L&F,还是不行……
      • 6年后,感谢您的回答!我试图更改可编辑 jcombobox 的颜色,并且只能在将其编辑器设置为金属类型后才能这样做。但是,这会导致框周围出现丑陋的边框。使用 JComponent 循环清除了框,背景设置得很好
      猜你喜欢
      • 2016-12-19
      • 2015-02-25
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多