1

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

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

我现在认为JList'sCellRenderer不支持这种东西,所以我想我必须做一些事情,比如创建一系列只读文本字段,单独设置其样式,并以某种方式将它们显示为列表?

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

对不起,很长的文字。谢谢!

4

1 回答 1

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.
  • 您的渲染器将使用此地图来决定要绘制的背景颜色。
  • 当用户做出选择并使项目具有新的背景颜色时,您可以更改 Map 保持的颜色并重新绘制列表。
  • 如果要显示其背景,请确保使渲染器不透明。
于 2013-07-26T03:33:10.627 回答