Удалить границу из JComboBox - PullRequest
2 голосов
/ 22 апреля 2009

Знаете ли вы какой-нибудь способ удалить границу из JComboBox в Java? Я пытаюсь следующий код

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

Не спрашивайте, почему кто-то хочет убрать границу из поля со списком ... Я думаю, это не имеет особого смысла, но это именно то, чего он хотел, и мне стало действительно интересно, можно ли это сделать. Я попробовал несколько трюков, но ни один из них не сработал.

Наиболее эффективным было изменение пользовательского интерфейса с помощью

cmb.setUI(new BasicComboBoxUI());

Это убирает границу, но изменяет L & F, и мне нужно сохранить Windows L & F, если это возможно.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 22 апреля 2009

Я провел небольшое исследование и обнаружил эту ошибку

Я попробовал это для себя, и это, кажется, влияет на границу. Возможно, вы захотите попробовать один или оба из следующих блоков кода для себя.

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 голосов
/ 25 августа 2009

Если вы хотите использовать Windows L & F, вы можете сделать cmd.setUI(new WindowsComboBoxUI()); Однако если вы хотите использовать любой L & F, вам лучше использовать решение, предложенное Jeach.

...