2012-01-05 13 views
6

Tôi muốn tạo ra một JList chứa các dòng về một Hashtable của String và đối tượng:Làm cách nào để tạo một JList chứa các mục nhập của một Hashtable của String và Object?

Hashtable<String,Object> 

yếu tố JList nên chứa mục Hashtable và hiển thị giá trị của khóa entry đó là một chuỗi ...

Có thể không? Nó được hoàn thiện bằng cách nào ?

+0

Cũng xem xét triển khai 'Bản đồ' trong tùy chọn' Hashtable'. – trashgod

+0

Tôi không thể, tôi phải sử dụng một hashtable vì tôi phải đối phó với một API cũ .. – aleroot

+0

Bạn có cần danh sách được sắp xếp theo khóa không? – trashgod

Trả lời

5

Triển khai giao diện ListModel bằng cách mở rộng AbstractListModel. Sử dụng mô hình có nguồn gốc để tạo JList của bạn. Xem thêm How to Use Lists.

+0

Bằng cách mã hóa giao diện 'Bản đồ', một giao diện có nhiều vĩ độ hơn để chọn một triển khai thay thế, chẳng hạn như' SortedMap'. – trashgod

+1

+1 nhưng ... Đây là công việc nhiều hơn @dogbane và giải pháp của tôi. Tuy nhiên, nếu Hashtable sẽ thay đổi theo thời gian và bạn cần cập nhật động JList, đây là cách để đi. – user949300

+1

Có, JList sẽ thay đổi vì người dùng có thể tương tác với nó, vì vậy đây là cách để đi. Tôi hỏi vì tôi đã hy vọng rằng có một công việc ít hơn để làm giải pháp, nhưng tiếc là không. Cảm ơn tất cả sự giúp đỡ. Tôi sẽ thực hiện một HastTable ListModel;). – aleroot

3

Bạn có thể triển khai giao diện ListModel để làm bất cứ điều gì bạn muốn. Tạo một lớp thực hiện nó và giữ lên HashMap mong muốn của bạn. Đặc biệt chú ý đến việc triển khai phương pháp getElementAt.

5

Sử dụng keyset của Hashtable của bạn cho các dữ liệu trong bạn JList:

Hashtable<String, Object> table = new Hashtable<String, Object>(); 
JList list = new JList(table.keySet().toArray()); 

Bạn cũng có thể gọi:

list.setListData(table.keySet().toArray()) 
+1

Tôi thích sự đơn giản của giải pháp này. Nhưng được cảnh báo rằng thứ tự của keySet sẽ khá ngẫu nhiên, do đó thứ tự của các mục trong JList sẽ không phải là những gì @aleroot mong đợi. – user949300

5

Hashtable là "cũ", vì vậy bạn nên xem xét sử dụng một HashMap thay .

Bạn có thể nhận Bộ sưu tập tất cả các giá trị trong Hashtable bằng cách gọi giá trị(). OOPS - Tôi đã đọc sai câu hỏi của bạn, thay đổi điều đó thành keySet(). Nếu bạn hài lòng với việc hiển thị chúng trong JList sử dụng phương thức toString() của chúng (ví dụ, chúng là Strings), chỉ cần thêm tất cả chúng vào JList. Thật không may, các nhà xây dựng JList, ít nhất là trong J6, không có Bộ sưu tập (thú cưng peeve của tôi - bao nhiêu năm có Bộ sưu tập được xung quanh ???), vì vậy bạn sẽ phải làm một công việc nhỏ ở đó.

Một cảnh báo. Hashtable và HashMap sắp xếp thứ tự các mục của họ theo một cách khá khó đoán. Vì vậy, thứ tự của các giá trị trong JList sẽ gần như chắc chắn không phải là thứ tự bạn muốn. Xem xét sử dụng LinkedHashMap hoặc TreeMap để duy trì thứ tự hợp lý hơn.