2010-12-10 32 views
5

Màu nền của mục đã chọn trong một JComboBox không thể chỉnh sửa là một loại màu xanh:Màu nền của mục đã chọn trong một không thể chỉnh sửa JComboBox

alt text

Có cách nào để làm điều này một màu sắc khác nhau, chẳng hạn như màu trắng, chẳng hạn?

+0

liên quan, có thể lặp lại, không thể quyết định: http://stackoverflow.com/questions/10258224/change-background-color-editable-jcombobox –

Trả lời

8

này nên làm việc

jComboBox1.setRenderer(new DefaultListCellRenderer() { 
    @Override 
    public void paint(Graphics g) { 
     setBackground(Color.WHITE); 
     setForeground(Color.BLACK); 
     super.paint(g); 
    } 
}); 
+0

Điều này chỉ hoạt động, nếu bạn không cần phải ghi đè lên phương thức getListCellRendererComponent của CellRenderer. Nếu bạn phải làm điều này, hãy sử dụng setSelectionBackground, giống như nó được hiển thị trong câu trả lời của camickr. –

3

Bạn đã thử viết riêng, tùy chỉnh, ListCellRenderer?

Khi phương pháp đó được yêu cầu cung cấp một thành phần tế bào render bạn sẽ có được những lập luận sau:

public Component getListCellRendererComponent(JList list, 
               Object value, 
               int index, 
               boolean isSelected, 
               boolean cellHasFocus) { 
+1

Sử dụng mã được cung cấp aioob và chỉ truyền giá trị cho một JLabel và đặt nền của nó thành màu bạn muốn. – user489041

+0

Vâng, tôi đã thử điều đó. Điều đó có thể thay đổi diện mạo của các mục menu khi bạn nhìn thấy chúng trong hộp thả xuống. Tuy nhiên, nó không thay đổi diện mạo của mục đã chọn. –

6

Nền bởi các renderer giao được overriden bởi màu nền lựa chọn của JList được sử dụng trong các popup cho hộp combo. Kiểm tra phương thức "paintCurrentValue" của lớp BasicComboBoxUI. Vì vậy, giải pháp thay thế sẽ là:

JComboBox comboBox = new JComboBox(...); 
Object child = comboBox.getAccessibleContext().getAccessibleChild(0); 
BasicComboPopup popup = (BasicComboPopup)child; 
JList list = popup.getList(); 
list.setSelectionBackground(Color.RED); 

Điều này cũng sẽ ảnh hưởng đến việc hiển thị cửa sổ bật lên. Nếu bạn không muốn nó ảnh hưởng đến cửa sổ bật lên thì bạn sẽ cần tạo trình kết xuất tùy chỉnh để đặt cụ thể nền của các mục đã chọn.

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