2009-04-22 194 views
2

你知道任何方式從Java中的JComboBox中刪除邊框嗎?我嘗試下面的代碼從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); 
     } 
    }); 
} 

不要問爲什麼會有人想從combobx刪除邊框...我想這沒有太大的意義,但是這它是如何被要求的,我真的很好奇它是否可以完成。我嘗試了幾個技巧,但都沒有工作。

最有效的是改變UI與

cmb.setUI(new BasicComboBoxUI()); 

這使得邊界消失,而是改變爲L & F和我需要的,如果可以保留Windows大號& F。

謝謝。

回答

5

我做了一些研究,發現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邊框。

祝你好運,

Jeach!

+0

謝謝Jeach!這對於默認的L&F(金屬)確實有效。但在Windows上,與系統L&F,它仍然不想工作... – Gabriel 2009-04-29 10:07:38

0

如果你想使用Windows大號&男,你可以做cmd.setUI(new WindowsComboBoxUI()); 如果,但是,希望能夠使用任何L- &男,你可能會更好使用Jeach提出的解決方案。