Удалить границу из JComboBox
Знаете ли вы какой-либо способ удалить границу из 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 ответа
Я провел небольшое исследование и нашел эту ошибку
Я попробовал это для себя, и это, кажется, влияет на границу. Возможно, вы захотите попробовать один или оба из следующих блоков кода для себя.
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!
Если вы хотите использовать Windows L&F, вы можете сделать cmd.setUI(new WindowsComboBoxUI());
Однако, если вы хотите использовать любой L & F, вам лучше использовать решение, предложенное Jeach.