Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改JComboBox内部弹出窗口(JList)的边框颜色_Java_Border_Jscrollpane_Jcombobox_Jlist - Fatal编程技术网

Java 更改JComboBox内部弹出窗口(JList)的边框颜色

Java 更改JComboBox内部弹出窗口(JList)的边框颜色,java,border,jscrollpane,jcombobox,jlist,Java,Border,Jscrollpane,Jcombobox,Jlist,我有一个JComboBox,几乎所有关于布局的东西都改变了。我更改了弹出窗口中的选择颜色、箭头按钮、背景颜色等。最后剩下的部分是弹出窗口的边框颜色(内部JList),我看不到它的样子 我的组合框如下所示: 如您所见,它有一个黑色边框,与整个布局不匹配。我想把它改成你在上面边框看到的蓝色 我做了一些研究,但没有一个解决方案对我有效。最接近的解决办法是这样。但它不起作用 随着seleciton颜色的更改,我已经尝试通过以下方式更改边框颜色: public static void setSelect

我有一个JComboBox,几乎所有关于布局的东西都改变了。我更改了弹出窗口中的选择颜色、箭头按钮、背景颜色等。最后剩下的部分是弹出窗口的边框颜色(内部JList),我看不到它的样子

我的组合框如下所示:

如您所见,它有一个黑色边框,与整个布局不匹配。我想把它改成你在上面边框看到的蓝色

我做了一些研究,但没有一个解决方案对我有效。最接近的解决办法是这样。但它不起作用

随着seleciton颜色的更改,我已经尝试通过以下方式更改边框颜色:

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);
}
publicstaticvoidsetselectioncolorofcombobox(JComboBox组合框)
{
对象子对象=comboBox.getAccessibleContext().getAccessibleChild(0);
BasicComboPopup=(BasicComboPopup)子项;
JList list=popup.getList();
列表.设置顺序(新线条边框(ColorPalette.LIGHT_BLUE,1));
列表.设置选择背景(调色板.浅蓝色);
列表.设置选择前景(颜色.白色);
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));
}
publicstaticvoid setbOrderColorOfComboxPopup(jComboxComboBox组合框)
{
对象子对象=comboBox.getAccessibleContext().getAccessibleChild(0);
BasicComboPopup=(BasicComboPopup)子项;
JList list=popup.getList();
列表.设置顺序(新线条边框(调色板.浅蓝色));
}
但这也不起作用。有人知道为什么这些常见的方法对我不起作用吗?或者有人至少知道另一种改变边框颜色的方法,这样我可以尝试不同的方法吗


目前我正在考虑,如果JList周围有滚动窗格之类的东西,如果可能的话,我将研究是否可以访问它并设置其边框。

您可以覆盖
basicComboxUI
类中的
createPopup()
方法来更改弹出窗口的边框:

jComboBox.setUI(new BasicComboBoxUI() {
    @Override
    protected ComboPopup createPopup() {
        BasicComboPopup basicComboPopup = new BasicComboPopup(comboBox);
        basicComboPopup.setBorder(new LineBorder(Color.RED));
        return basicComboPopup;
    }
});

经过数小时的尝试和研究,我对滚动窗格的最后一个想法在几分钟内引导我找到了解决方案。想到一个包含列表的组件,我想到了弹出窗口。弹出窗口包含两个级别,可以有边框。 第一个是弹出窗口中的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));
}
publicstaticvoid setbOrderColorOfComboxPopup(jComboxComboBox组合框)
{
对象子对象=comboBox.getAccessibleContext().getAccessibleChild(0);
BasicComboPopup=(BasicComboPopup)子项;
popup.setOrder(新的线条边框(颜色调色板.浅蓝色));
//JList list=popup.getList();
//列表.设置顺序(新线条边框(调色板.浅蓝色));
}

好的,谢谢。几分钟前,我也想到了这个解决方案我仍然认为这是最好的答案。