在Java中创建JList,如何更改条目的背景颜色?

时间:2013-07-26 03:28:17

标签: java swing jlist listcellrenderer

好的,所以我有JList个项目。我选择一个项目,然后单击一个按钮。当我点击按钮时,我希望该项目的背景颜色永久改变

我已经创建了一个自定义渲染器,但是我可以用它来改变整个背景的颜色,或者在选择选择项时更改背景颜色。那不是我想要的。我试图使用getBounds获取Rectangle对象(所以我可以做一些像在Rectangle区域内绘制所有内容的东西?)但我甚至不知道如何开始。

我现在觉得JList的{​​{1}}不支持这种东西,所以我想我必须做一些事情,比如创建一个readOnly textFields系列,单独设置它的样式,并以某种方式将它们显示为列表?

我真的不需要任何代码(除非你想给出一个例子),我只是想找到一个如何做到这一点的大方向。

抱歉这篇长篇文章。谢谢!

1 个答案:

答案 0 :(得分:3)

你做同样的事情,但是如果用户的动作表明它应该被锁定,那么写出你的代码逻辑来锁定渲染的颜色。关键在于你的代码逻辑。也许您想要更改正在渲染的对象的状态,或者您可能希望更改将渲染颜色保存为值并将显示的对象保存为键的Map的状态。我可能会选择后者。

如,

// ListItemType is whatever type is being displayed in your JList.
Map<ListItemType, Color> listItemBackground = new HashMap<ListItemType, Color>();
// now add each item to the JList with the default background color.
  • 您的渲染器将使用此地图来决定要绘制的背景颜色。
  • 当用户进行选择并使项目具有新的背景颜色时,您可以更改地图所持有的颜色并重新绘制列表。
  • 如果要显示其背景,请确保使渲染器不透明。