Swing JList SetCellRenderer BackGround Color не работает
Доброе утро:
У меня есть JList в Swing с некоторыми данными. Я выбираю данные из базы данных и пытаюсь выбрать данные, совпадающие с такими же в 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;
}
});
И ошибка, которую я получил:
Exception in thread "AWT-EventQueue-0" java.lang.StackruError
at javax.swing.UIDefaults.getFromHashtable(Unknown Source)
at javax.swing.UIDefaults.get(Unknown Source)
at javax.swing.MultiUIDefaults.get(Unknown Source)
at javax.swing.UIManager.get(Unknown Source)
at sun.swing.DefaultLookup.get(Unknown Source)
at sun.swing.DefaultLookup.getBorder(Unknown Source)
at sun.swing.DefaultLookup.getBorder(Unknown Source)
at javax.swing.DefaultListCellRenderer.getNoFocusBorder(Unknown Source)
at javax.swing.DefaultListCellRenderer.getListCellRendererComponent(Unknown Source)
at com.mypackage.main.Principal$2.getListCellRendererComponent(Principal.java:509)
at javax.swing.plaf.basic.BasicListUI.updateLayoutState(Unknown Source)
at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(Unknown Source)
at javax.swing.plaf.basic.BasicListUI$Handler.valueChanged(Unknown Source)
at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
at javax.swing.DefaultListSelectionModel.setSelectionInterval(Unknown Source)
at javax.swing.JList.setSelectedIndex(Unknown Source)
at javax.swing.JList.setSelectedValue(Unknown Source)
Любые предложения / помощь? Будет оценено. Благодарю.
1 ответ
Этот массив сохраняет теги, которые я хотел бы выделить.
Затем вам нужно сравнить данные в массиве с отображаемыми данными.
Самый простой способ сделать это - скопировать данные из массива в набор:
HashSet<String> values = new HashSet<String>();
for (String value: segmentation2)
values.add( value );
Теперь в рендере основная логика будет такой:
if (!isSelected)
if (values.contains(value.toString())
setBackground( Color.GREEN );
else
setBackground( null );
Идея заключается в том, что выделение основано на значении, а не на выборе.