我有一个JComboBox,几乎所有关于布局的内容都有所改变。我更改了弹出窗口中的选择颜色,箭头按钮,背景颜色等。最后剩下的部分,我没有看到我想要的方式,是弹出窗口的边框颜色(内部JList)。 / p>
我的组合框看起来像这样:
如您所见,它有一个黑色边框,与整个布局不匹配。我想将其更改为您在上方边框中看到的蓝色。
我做了一些研究,但没有解决方案适合我。最接近的解决方案是post。但它没有用。
随着选择颜色的改变,我已经尝试通过以下方式改变边框颜色:
public static void setSelectionColorOfComboBox(JComboBox<String> comboBox)
{
Object child = comboBox.getAccessibleContext().getAccessibleChild(0);
BasicComboPopup popup = (BasicComboPopup) child;
JList list = popup.getList();
list.setBorder(new LineBorder(ColorPalette.LIGHT_BLUE, 1));
list.setSelectionBackground(ColorPalette.LIGHT_BLUE);
list.setSelectionForeground(Color.WHITE);
list.setFocusable(false);
}
为确保不遗漏任何内容,我根据上面的链接帖子创建了一个单独的方法来更改边框:
public static void setBorderColorOfComboBoxPopup(JComboBox<String> comboBox)
{
Object child = comboBox.getAccessibleContext().getAccessibleChild(0);
BasicComboPopup popup = (BasicComboPopup) child;
JList list = popup.getList();
list.setBorder(new LineBorder(ColorPalette.LIGHT_BLUE));
}
但这也不起作用。有谁知道为什么那些常见的方法对我不起作用,或者至少有人知道另一种改变边框颜色的方法,所以我可以尝试不同的东西吗?
目前我正在考虑,如果有一个类似于JList周围的滚动窗格,我会做一些关于我是否可以访问它并设置其边框的研究,如果可能的话。
答案 0 :(得分:1)
您可以覆盖createPopup()
类中的BasicComboBoxUI
方法来更改弹出窗口的边框:
jComboBox.setUI(new BasicComboBoxUI() {
@Override
protected ComboPopup createPopup() {
BasicComboPopup basicComboPopup = new BasicComboPopup(comboBox);
basicComboPopup.setBorder(new LineBorder(Color.RED));
return basicComboPopup;
}
});
答案 1 :(得分:0)
经过几个小时的尝试和研究,我对滚动窗格的最后一个想法引导我在几分钟内找到解决方案。考虑到包含列表的组件,我想到了弹出窗口。弹出窗口包含两个级别,可以有边框。 第一个是弹出窗口中的JList,第二个是弹出窗口本身。不知何故,黑色边框覆盖了我内部JList的蓝色边框。 长话短说,跟随代码片完成了工作:
public static void setBorderColorOfComboBoxPopup(JComboBox<String> comboBox)
{
Object child = comboBox.getAccessibleContext().getAccessibleChild(0);
BasicComboPopup popup = (BasicComboPopup) child;
popup.setBorder(new LineBorder(ColorPalette.LIGHT_BLUE));
// JList list = popup.getList();
// list.setBorder(new LineBorder(ColorPalette.LIGHT_BLUE));
}