Java Swing JList SetCellRenderer背景色不工作

Java Swing JList SetCellRenderer背景色不工作,java,swing,highlight,jlist,renderer,Java,Swing,Highlight,Jlist,Renderer,早上好: 我有一个JList,其中包含一些数据。我从数据库中选择了数据,并尝试选择与JList中相同的数据和其他颜色的数据,但我尝试了所有可能的方法,并给了我很多错误。我的密码 此数组保存我要突出显示的标记。 final String[] segmentacion2 = suscriptor.getSegmentacion2().split(";"); for (int j = 0; j < segmentacion2.length; j++) { lis

早上好:

我有一个JList,其中包含一些数据。我从数据库中选择了数据,并尝试选择与JList中相同的数据和其他颜色的数据,但我尝试了所有可能的方法,并给了我很多错误。我的密码

此数组保存我要突出显示的标记。

 final String[] segmentacion2 = suscriptor.getSegmentacion2().split(";");
 for (int j = 0; j < segmentacion2.length; j++)
     {
         listaSegmentacion2.setSelectedValue(segmentacion2[j], true);
     }


     listaSegmentacion2.setCellRenderer(new DefaultListCellRenderer() {

         @Override
         public Component getListCellRendererComponent(JList list,
                 Object value, int index, boolean isSelected,
                 boolean cellHasFocus) {

             super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
         for (int j = 0; j < segmentacion2.length; j++)
             {
                 listaSegmentacion2.setSelectedValue(segmentacion2[j], true);
             }

             System.out.println(isSelected);
             if(isSelected)
             {
                 setBackground(Color.green);
             }
             else
             {
                 setBackground(null);
             }
           return this;
         }
     });
这是为了预先选择标签。

 final String[] segmentacion2 = suscriptor.getSegmentacion2().split(";");
 for (int j = 0; j < segmentacion2.length; j++)
     {
         listaSegmentacion2.setSelectedValue(segmentacion2[j], true);
     }


     listaSegmentacion2.setCellRenderer(new DefaultListCellRenderer() {

         @Override
         public Component getListCellRendererComponent(JList list,
                 Object value, int index, boolean isSelected,
                 boolean cellHasFocus) {

             super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
         for (int j = 0; j < segmentacion2.length; j++)
             {
                 listaSegmentacion2.setSelectedValue(segmentacion2[j], true);
             }

             System.out.println(isSelected);
             if(isSelected)
             {
                 setBackground(Color.green);
             }
             else
             {
                 setBackground(null);
             }
           return this;
         }
     });
有什么建议/帮助吗?我会很感激的。谢谢

此数组保存我要突出显示的标记

然后需要将数组中的数据与正在渲染的数据进行比较

最简单的方法是将数据从阵列复制到集合:

HashSet<String> values = new HashSet<String>();

for (String value: segmentation2)
    values.add( value );
其思想是突出显示基于值,而不是选择

此数组保存我要突出显示的标记

然后需要将数组中的数据与正在渲染的数据进行比较

最简单的方法是将数据从阵列复制到集合:

HashSet<String> values = new HashSet<String>();

for (String value: segmentation2)
    values.add( value );

我们的想法是突出显示基于值,而不是选择。

请提供一个选项,以便我们也可以复制您的异常。请不要发布整个代码,而是创建一个小的可运行示例(最多100-150行代码)。顺便说一句:
setBackground(空)
看起来很难看。请改为尝试
setBackground(list.getBackground())
。BTW2:必须删除渲染器中对
setSelectedValue(对象)
的调用。我认为-这是您的问题的主要原因。BTW3:如果您只想用绿色背景绘制选择,您只需使用方法
JList.setSelectionBackground(Color)
,并完全删除渲染器。这就是我需要的。非常感谢你!请提供一份报告,以便我们也可以复制您的例外情况。请不要发布整个代码,而是创建一个小的可运行示例(最多100-150行代码)。顺便说一句:
setBackground(空)
看起来很难看。请改为尝试
setBackground(list.getBackground())
。BTW2:必须删除渲染器中对
setSelectedValue(对象)
的调用。我认为-这是您的问题的主要原因。BTW3:如果您只想用绿色背景绘制选择,您只需使用方法
JList.setSelectionBackground(Color)
,并完全删除渲染器。这就是我需要的。非常感谢你!这就是我需要的。非常感谢你@死亡之枪,很高兴它有帮助。别忘了点击复选标记“接受”答案,这样人们就知道问题已经解决了。这就是我需要的。非常感谢你@死亡之枪,很高兴它有帮助。不要忘记点击复选标记“接受”答案,这样人们就知道问题已经解决了。