JList中所选项目的背景色不起作用



为什么我选择的项目背景没有改变?我当然知道我按下列表项是因为我的System.out.println显示了我当前的选择并显示了所选项的id。没有错误,什么都没有,只是不起作用。为什么?

 Object[] tablen = sqltable.toArray();
 JList list;
 list = new JList(tablen);                     
 list.addListSelectionListener(new ListSelectionListener(){
  @Override
  public void valueChanged(ListSelectionEvent e) {
   int idx = list.getSelectedIndex();
   setOpaque(true);
    if (idx != -1){
    //list.setSelectionBackground(Color.lightGray);
    // list.setSelectionForeground(Color.lightGray);
    setForeground(Color.red);
    setBackground(Color.BLUE);
    setBackground(list.getSelectionBackground());
    setForeground(list.getSelectionForeground()); 
    System.out.println("Current selection: " + tablen[idx]);
   }else{
     setForeground(Color.red);
     setBackground(Color.BLUE);
     setBackground(list.getBackground());
     setForeground(list.getForeground());
     System.out.println("Please choose a language."); 
        }
  }                     
});
   list.setCellRenderer(new ListCellRenderer() {
   @Override
   public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
     String[] val = (String[]) value;
     return new JLabel(val[0]);
    }                           
});

在单元格渲染器实现中要注意,默认情况下JLabel是非不透明的,这可能是列表单元格渲染器中未绘制背景色的原因。(参见相关内容)

另一方面,我会看看"提供自定义渲染器",了解如何实现自定义单元格渲染器的更好示例。

相关内容

  • 没有找到相关文章

最新更新