2013-07-26 36 views
14

tôi sử dụng một combo box trên bảng điều khiển và như tôi biết chúng tôi có thể thêm mục có văn bản chỉmục Thêm vào một JComboBox

comboBox.addItem('item text'); 

Nhưng một số lần tôi cần phải sử dụng một số giá trị của mặt hàng đó và mục văn bản như trong html chọn:

<select><option value="item_value">Item Text</option></select> 

Có cách nào để đặt cả giá trị và tiêu đề trong mục hộp tổ hợp không?

Hiện tại tôi sử dụng hàm băm để giải quyết vấn đề này.

+1

tại sao thẻ jruby ??? – nachokk

+0

Tôi sử dụng nó với jruby. Nhưng tôi đồng ý không có liên quan đến ruby ​​trong câu hỏi của tôi. –

Trả lời

31

Quấn các giá trị trong một lớp và ghi đè phương thức toString().

class ComboItem 
{ 
    private String key; 
    private String value; 

    public ComboItem(String key, String value) 
    { 
     this.key = key; 
     this.value = value; 
    } 

    @Override 
    public String toString() 
    { 
     return key; 
    } 

    public String getKey() 
    { 
     return key; 
    } 

    public String getValue() 
    { 
     return value; 
    } 
} 

Thêm ComboItem vào comboBox của bạn.

comboBox.addItem(new ComboItem("Visible String 1", "Value 1")); 
comboBox.addItem(new ComboItem("Visible String 2", "Value 2")); 
comboBox.addItem(new ComboItem("Visible String 3", "Value 3")); 

Bất cứ khi nào bạn nhận được mục đã chọn.

Object item = comboBox.getSelectedItem(); 
String value = ((ComboItem)item).getValue(); 
+0

Đã cập nhật cho Swing. – JBuenoJr

+0

Cảm ơn, đó là những gì tôi cần –

+0

Làm cách nào để chọn một mục từ khóa? –

2

Bạn có thể sử dụng bất kỳ đối tượng nào làm mục. Trong đối tượng đó bạn có thể có một số trường bạn cần. Trong trường hợp của bạn, trường giá trị. Bạn phải ghi đè lên phương thức toString() để biểu diễn văn bản. Trong trường hợp của bạn "văn bản mục". Xem ví dụ:

public class AnyObject { 

    private String value; 
    private String text; 

    public AnyObject(String value, String text) { 
     this.value = value; 
     this.text = text; 
    } 

... 

    @Override 
    public String toString() { 
     return text; 
    } 
} 

comboBox.addItem(new AnyObject("item_value", "item text")); 
1

addItem (Object) có một đối tượng. Trình kết xuất JComboBox mặc định gọi toString() trên đối tượng đó và đó là những gì nó hiển thị dưới dạng nhãn.

Vì vậy, đừng chuyển vào chuỗi thành addItem(). Chuyển một đối tượng có phương thức toString() trả về nhãn bạn muốn. Đối tượng cũng có thể chứa bất kỳ số lượng trường dữ liệu nào khác.

Hãy thử chuyển mã này vào hộp tổ hợp của bạn và xem cách trình kết xuất hiển thị. getSelectedItem() sẽ trả về đối tượng mà bạn có thể quay trở lại Widget để lấy giá trị từ đó.

public final class Widget { 
    private final int value; 
    private final String label; 

    public Widget(int value, String label) { 
     this.value = value; 
     this.label = label; 
    } 

    public int getValue() { 
     return this.value; 
    } 

    public String toString() { 
     return this.label; 
    } 
} 
1

Gọi phương thức setSelectedIndex("item_value"); không hoạt động vì setSelectedIndex sử dụng chỉ mục tuần tự.

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