2009-04-22 14 views
2

Connaissez-vous un moyen de supprimer la bordure d'un JComboBox en Java? J'essaie le code suivantSupprimer la bordure de 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(); 
    } 
} 

et

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

Ne demandez pas pourquoi quelqu'un voudrait supprimer la bordure d'un combobx ... Je suppose que cela n'a pas de sens trop, mais C'est ce que l'on veut et je suis vraiment curieux de savoir si cela est possible. J'ai essayé plusieurs trucs, mais aucun d'entre eux n'a fonctionné.

Le plus efficace est en train de changer l'interface utilisateur avec

cmb.setUI(new BasicComboBoxUI()); 

Cela fait aller loin de la frontière, mais modifie la L & F, et je dois garder Windows L & F si possible.

Merci.

Répondre

5

J'ai fait un peu de recherche et trouvé this bug

Je l'ai essayé pour moi-même et il ne semble affecter la frontière. Vous pourriez vouloir essayer un ou les deux blocs de code suivants pour vous-même.

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

Il est important de noter qu'au bas de l'entrée de bug, vous pouvez lire ce qui suit:

Le JButton maintient sa propre frontière si JComponent paintBorder() et paintComponent ( n'a aucune connaissance de la bordure JComboBox.

Bonne chance,

Jeach!

+0

Merci Jeach! Cela fonctionne en effet pour le L & F par défaut (Metal). Mais sur Windows, avec le système L & F, ça ne veut toujours pas fonctionner ... – Gabriel

+0

6 ans plus tard, merci pour cette réponse! J'essayais de changer la couleur d'un jcombobox modifiable et ne pouvais le faire qu'après avoir réglé son éditeur sur le type de métal. Cependant, cela a provoqué une frontière laide entourant la boîte. L'utilisation de la boucle JComponent a libéré la boîte et l'arrière-plan est bien défini – tenwest

0

Si vous souhaitez utiliser les fenêtres L & F, vous pouvez le faire cmd.setUI(new WindowsComboBoxUI()); Si vous, cependant, voulez pouvoir utiliser toute L & F, vous pourriez être mieux d'utiliser la solution proposée par Jeach.