두 개의 JLists가 있습니다. 목록 A에서 항목을 선택하면 하나 이상의 관련 항목이 목록 B에서 강조 표시됩니다. 여기에 간단한 경우 AB, AC, BC 및 ABC가있는 목록 1이 있습니다. 목록 2에는 A, B 및 C가 있습니다. 목록 1에서 AC를 선택한 경우 목록 2 등에서 A와 C를 강조 표시합니다.Java - JList 1의 선택에 따라 JList 2에서 항목을 어떻게 선택합니까?
ListSelectionListener 및 ListCellRenderer가 완전히 처리되지 않습니다. 내 생각이었다 다음 ListSelectionListener에에서
목록 1 지명자에 대한 ArrayList에 또는 HashMap의 단지
리스트 2를 수행 목록 1에서 선택한 내용에 따라 강조한다 목록 2에서 어떤 항목이 없습니다. 이에 따라 목록 1.
이 작동하지 않습니다에 대한 ListSelectionListener에에 지정되었다 내용에 따라 파란색 또는 흰색의 배경을 설정 목록이의의 ListCellRenderer의 논리 목록 1 ListSelectionListener에()에서 다시 칠, 하지만 난 ' 내가 그것을 잘못 구현했기 때문에 또는 그것이 잘못된 접근 방식이기 때문에 그것이 무엇인지 알지 못합니다.
아이디어가 있으십니까? 정말 감사합니다 ...
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class Test extends JFrame {
public static JList list1, list2;
public static DefaultListModel model1, model2;
public static List<Integer> highlightThese = new ArrayList<Integer>();
public Test() {
setPreferredSize(new Dimension(300, 100));
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
list1 = new JList();
list1.setModel(new ListModel1());
model1 = new DefaultListModel();
list1.addListSelectionListener(new ListenerForList1());
cp.add(list1);
list2 = new JList(new String[] {"A", "B", "C"});
model2 = new DefaultListModel();
cp.add(list2);
pack();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Test().setVisible(true);
}
});
}
}
class ListModel1 extends DefaultListModel {
String[] listItems = new String[] { "AB", "AC", "BC", "ABC" };
public ListModel1() {
for (int i = 0; i < listItems.length; i++) {
addElement(listItems[i]);
}
}
}
class ListModel2 extends DefaultListModel {
String[] listItems = new String[] { "A", "B", "C" };
public ListModel2() {
for (int i = 0; i < listItems.length; i++) {
addElement(listItems[i]);
}
}
}
class ListenerForList1 implements ListSelectionListener {
@Override
public void valueChanged(ListSelectionEvent e) {
JList list = (JList)(e.getSource());
Object[] tmp = list.getSelectedValues();
String[] selectedValues1 = Arrays.copyOf(tmp, tmp.length, String[].class);
for (int i = 0; i < selectedValues1.length; i++) {
String l1Val = selectedValues1[i];
for (int j = 0; j < Test.model2.getSize(); j++) {
String l2Val = (String)(Test.model2.get(j));
if (l1Val.indexOf(l2Val) >= 0) {
// Want to highlight item j in list2 here, or at least
// designate somehow that it should be highlighted (in
// TestRenderer2?). Must also handle turning off highlight
// at some point but will deal with that later.
Test.highlightThese.add(j);
}
}
}
list2.repaint();
}
}
class TestRenderer2 extends JLabel implements ListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object stringval, int inx, boolean isSelected, boolean cellHasFocus) {
if (Test.highlightThese.contains(inx)) {
setBackground(Color.BLUE);
setForeground(Color.WHITE);
} else {
setBackground(Color.WHITE);
setForeground(Color.BLACK);
}
return this;
}
}
우수! 대단히 고마워요. 이것은 완벽하게 작동합니다.하지만 저는 그것을 이해하고 실제 상황에 적응할 수 있도록하기 위해 조금 공부하고 있습니다. 매우 감사! – regger