【问题标题】:Background color to selected item in JList not workingJList中所选项目的背景颜色不起作用
【发布时间】:2016-07-27 07:25:18
【问题描述】:

为什么我选择的项目背景没有改变?我当然知道我按下列表项,因为我的 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]);
    }                           
});

【问题讨论】:

  • nop 我试过这个,我不能在我的单元格渲染器中返回 c,因为如果我这样做我会失去 JLabler 返回
  • 在将其标记为重复之前尝试阅读问题,而不是查看给定的标题

标签: java swing jlist listcellrenderer


【解决方案1】:

请注意,在您的单元格渲染器实现中,JLabel 默认情况下是不透明的,这可能是未绘制列表单元格渲染器中的背景颜色的原因。 (见related

另一方面,我会查看Providing a Custom Renderer,以获取有关如何实现自定义单元格渲染器的更好示例。

【讨论】:

  • setOpaque(true);是我的情况吗?伙计,我讨厌 java gui(当然主要是因为我不知道)。
猜你喜欢
  • 2018-12-28
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多