Java 着色盒

Java 着色盒,java,swing,colors,jcombobox,Java,Swing,Colors,Jcombobox,愚蠢的问题:我正在尝试给JComboBox上色-我的ComboBoxRenderer getListCellRendererComponent方法有时会得到控制,并且工作正常-其他时候JComboBox只是白色的。这个问题似乎部分受到combobox是否具有焦点的影响,但我的方法似乎从来没有关注布尔cellHasFocus——即使JComboBox作为一个整体似乎具有焦点 我的一个想法是创建我自己的ComboBox类——或者我可以创建一个UI类来处理paint函数吗?我试过的东西似乎都不管用——

愚蠢的问题:我正在尝试给JComboBox上色-我的ComboBoxRenderer getListCellRendererComponent方法有时会得到控制,并且工作正常-其他时候JComboBox只是白色的。这个问题似乎部分受到combobox是否具有焦点的影响,但我的方法似乎从来没有关注布尔cellHasFocus——即使JComboBox作为一个整体似乎具有焦点

我的一个想法是创建我自己的ComboBox类——或者我可以创建一个UI类来处理paint函数吗?我试过的东西似乎都不管用——我会感激你的帮助

在我的课堂上,我使用这个:(
UIManager


ListCellRenderer
应该可以。您将需要共享代码…您只想为列表部分或字段部分着色吗?谢谢,@MadProgrammer!我检查了,没有字段部分-我只有两行,并在它们之间切换。所以我希望当JComboBox有焦点时,这两行都是彩色的,当它没有焦点时,这两行都是白色的。如果一行也被选中,如果它有另一种颜色就好了,但这不是必需的。正如我所说,ListCellRenderer似乎从未将cellHasFocus视为真。所以,我不知道是应该使用JComboBox本身,还是使用JComboBoxUI。你能给我一些建议吗?如果你有一些示例代码(你有的),我很难理解它@MadProgrammer!如果我只是创建一个新的(无字段)JComboBox,它的颜色是白色的。如果我添加语句cBox.setUI(newBasicComboxUI());JComboBox如果没有焦点,则为白色;如果有焦点,则为蓝色;当我使用鼠标选择其中一行时(不使用上下箭头),它实际上只显示我在GetListCellRenderComponent方法中指定的颜色。选择后,它会返回蓝色。我的问题是:我如何控制这些颜色-尤其是蓝色,因为我不知道这是在哪里(或为什么)产生的。提前谢谢!在另一篇关于JComboBox的帖子中找到了一个解决方案(paintComponent)。但是,在paintComponent中使用drawString生成的文本看起来有点“不稳定”(与JList滚动显示相比),因此这不是一个很好的解决方案-有人知道为什么应该这样做和/或如何修复它吗?
UIManager.put("ComboBox.background", new ColorUIResource(Color.lightGray));
    UIManager.put("JTextField.background", new ColorUIResource(Color.lightGray));
    UIManager.put("ComboBox.selectionBackground", new ColorUIResource(Color.green));
    UIManager.put("ComboBox.selectionForeground", new ColorUIResource(Color.RED));