3 Stimmen

Rahmen von JComboBox entfernen

Kennen Sie eine Möglichkeit, den Rahmen von einer JComboBox in Java zu entfernen? Ich versuche den folgenden Code

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

y

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

Fragen Sie nicht, warum jemand den Rand einer combobx entfernen möchte... Ich schätze, es macht nicht viel Sinn, aber es ist so gewollt, und ich bin wirklich neugierig geworden, ob es machbar ist. Ich habe mehrere Tricks ausprobiert, aber keiner davon hat funktioniert.

Am effektivsten war die Änderung der Benutzeroberfläche mit

cmb.setUI(new BasicComboBoxUI());

Dadurch verschwindet zwar der Rahmen, aber der L&F wird verändert, und ich muss den Windows-L&F nach Möglichkeit beibehalten.

Danke.

5voto

Jeach Punkte 8110

Ich habe ein wenig recherchiert und Folgendes gefunden dieser Fehler

Ich habe es selbst ausprobiert, und es scheint sich tatsächlich auf den Rand auszuwirken. Vielleicht möchten Sie einen oder beide der folgenden Codeblöcke selbst ausprobieren.

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

Es ist wichtig zu beachten, dass am Ende des Fehlereintrags Folgendes zu lesen ist:

Der JButton behält seinen eigenen Rahmen bei, so dass JComponent paintBorder() y paintComponent() kennt den Rahmen der JComboBox nicht.

Viel Glück!

Jeach!

0voto

Markus Jevring Punkte 812

Wenn Sie den Windows-L&F verwenden möchten, können Sie Folgendes tun cmd.setUI(new WindowsComboBoxUI()); Wenn Sie jedoch in der Lage sein wollen, jeden L&F zu verwenden, sollten Sie vielleicht besser die von Jeach vorgeschlagene Lösung verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X