【问题标题】:How to dynamically make bold a single row in JList?如何动态地使 JList 中的单行加粗?
【发布时间】:2012-01-13 08:02:19
【问题描述】:

我需要将 JList 组件中的一行加粗以显示活动行。应该动态完成以让用户立即看到活动行中的更改。我怎样才能做到这一点?

【问题讨论】:

    标签: java swing dynamic jlist bold


    【解决方案1】:

    查看渲染器中的 CustomCellRenderer,您可以根据 isSelected 参数更改显示标签的颜色。

    【讨论】:

    • 我创建了一个CustomCellRenderer 并在其中创建了一个方法来设置粗体行的索引(以便渲染器可以理解哪个应该加粗)然后我将它分配给我的JList。但是当我调用我的方法(((boldCellrenderer)jList1.getCellRenderer()).SetBoldedIndex(boldIndex);)时,它不会更新视图,直到我执行诸如单击另一行之类的操作。我试图在我的 setter 方法中调用 updateUI() 并且它有效,这是正确的方法还是我应该做其他事情?
    • 这里是一个简单的使用例子。 github.com/alekstheod/Promasi-V2/blob/master/… 组件 getListCellRendererComponent 将在每次需要重绘当前单元格时调用。因此,如果 isSelected 为真,则必须更改标签的颜色并将其返回,否则将颜色更改为白色。
    • @AlexTheo:但我的问题是我有一个 JList 和一个 JButton。用户可以选择 JList 中的任何项目,无需执行任何操作;但是当用户单击 JButton 时,JList 中的活动(选定)项应存储为当前值并加粗。
    • HHHmm 我用一个新类 (Entry) 完成了它,它包含一个布尔变量,显示它是否被选中,以及一个存储您的真实条目的对象。因此,您将传递包含您的对象和此布尔变量的 Entry 实例,而不是您的对象。之后,您将能够通过检查 CustomCellRenderer 中的布尔变量来检查是否选择了条目。
    【解决方案2】:

    以防万一您想更改所选项目的颜色,您可以使用:

    list.setSelectionForeground(Color.RED);
    

    还有一个类似的API用于设置选中项的背景:

    list.setSelectionBackground(Color.BLUE);
    

    【讨论】:

    • 另一种 +1,同样可以通过定义 UIManager
    猜你喜欢
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2017-05-21
    • 2023-03-05
    • 2023-04-09
    • 1970-01-01
    • 2017-06-04
    相关资源
    最近更新 更多