2010-01-11 29 views
7

Tôi đang sử dụng DefaultComboBoxModel để hiển thị danh sách khách hàng trong một JComboBox. Danh sách hiện chỉ hiển thị tên của họ. Tôi cũng muốn có tham chiếu đến từng khách hàng trong phạm vi DefaultComboBoxModel để khi tên được chọn, nó cũng giữ tham chiếu đến đối tượng khách hàng thực.Java Swing: Mở rộng các phương thức DefaultComboBoxModel và ghi đè

Để đạt được điều này, tôi nghi ngờ tôi phải gia hạn DefaultComboBoxModel và có thể ghi đè phương thức addElement()? Hoặc tôi có thể chỉ cần thêm một phương pháp mới mà cũng có thể lưu trữ tài liệu tham khảo của tôi cho khách hàng? Nếu vậy, tôi có phải xem mã nguồn cho DefaultComboBoxModel để xem cách mã lưu trữ các phần tử không? Xin lỗi nếu câu hỏi này là khó hiểu nhưng tôi không thể tìm ra cách để làm điều đó đúng cách. Cảm ơn vì đã đọc.

Trả lời

6

Nếu bạn trong đối tượng khách hàng của bạn ghi đè lênString() để trả lại bất cứ điều gì bạn muốn hiển thị trong JComboBox nó sẽ hoạt động tốt. Nếu bạn đang sử dụng toString cho các mục đích khác, bạn cần phải ghi đè lên mô hình hoặc trình kết xuất để sử dụng các trường chính xác từ đối tượng Customer.

-Cập nhật đề xuất của Tom- Tạo đối tượng mới CustomerView bao bọc đối tượng khách hàng thực và do đó có thể tham chiếu đến nó nhưng cũng ghi đè toString() để trả lại tên của khách hàng.

+3

Thay vì thay đổi mô hình hoặc (nhiều hơn) trình kết xuất nếu thay đổi 'Customer.toString' là không phù hợp, hãy thêm' CustomerComboView' (hoặc tên tương tự) có đại diện hiển thị thích hợp của đối tượng 'Customer' (với phương thức 'toString' và' getCustomer'/'customer'). –

+0

@Tom Hawtin - Cảm ơn bạn rõ ràng là tốt hơn rất nhiều – willcodejavaforfood

+0

Đề xuất tuyệt vời, cảm ơn cả hai! – Johan

Các vấn đề liên quan