JList 中所选项目的背景颜色不起作用
Background color to selected item in JList not working
为什么我选择的项目背景没有改变?我肯定知道我按下了列表项,因为我的 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
默认情况下是非不透明的,这可能是列表单元格渲染器中的背景颜色未绘制的原因。 (参见 related)
另一方面,我会查看 Providing a Custom Renderer 以获得有关如何实现自定义单元格渲染器的更好示例。
为什么我选择的项目背景没有改变?我肯定知道我按下了列表项,因为我的 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
默认情况下是非不透明的,这可能是列表单元格渲染器中的背景颜色未绘制的原因。 (参见 related)
另一方面,我会查看 Providing a Custom Renderer 以获得有关如何实现自定义单元格渲染器的更好示例。