Item
이라는 사용자 정의 JPanel 구성 요소로 JList를 표시해야합니다. 이러한 구성 요소에는 고유 한 ID name
이 있습니다. 그것들은 JList에 동적으로 추가되거나 방금 업데이트되었습니다 (이미 존재하는 경우). 다음 구현을 시도하지만 빈 JList 만 생성합니다. 제발 조언.JList에서 사용자 정의 JPanel 구성 요소 사용
class Item extends JPanel {
JLabel name = new JLabel(" ");
JLabel col1 = new JLabel(" ");
JLabel col2 = new JLabel(" ");
Item(){
setMinimumSize(new Dimension(100, 20));
setLayout(new BorderLayout());
add(name, BorderLayout.WEST);
add(col1, BorderLayout.CENTER);
add(col2, BorderLayout.EAST);
}
}
public class Test_List extends JFrame {
private final JList list = new JList(new Item[0]);
HashMap<String, Item> map = new HashMap<String, Item>();
Test_List(){
setTitle("Test JList");
setLayout(new BorderLayout());
add(new JScrollPane(list), BorderLayout.CENTER);
pack();
}
public void update_item(String name, String s1, String s2){
Item item = map.get(name);
if (item == null){ // add new
item = new Item();
item.name.setText(name);
map.put(name, item);
list.add(item);
}
item.col1.setText(s1);
item.col2.setText(s2);
}
public static void main(String s[]) {
final Test_List frame = new Test_List();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.setVisible(true);
}
});
frame.update_item("A", "a", "aa"); // add new item
frame.update_item("B", "b", "bb"); // add new item
frame.update_item("A", "aa", "a"); // update existing item
}
}
이 한 번 봐보고, 모든 것을, 나는 당신이 사용
JTable
와 더 나을 것이라고 생각했다 가졌 [Custom Cell Renderer 작성] (http://docs.oracle.com/javase/tutorial/uiswing/components/list.html#renderer) – MadProgrammer아, 모델에 구성 요소를 추가하지 마십시오. 모델 데이터 모델 – MadProgrammer