一種方法是不改變內容,但提供一個適當的渲染器,它在繪畫期間檢查它是否在彈出框內。
的證明了概念的代碼片段如下所示:
JComboBox box = new JComboBox(new String[] { "One|1", "Two|2", "Three|3" });
box.setRenderer(new ListCellRenderer<String>() {
private JList<? extends String> list;
private final JLabel label = new JLabel() {
@Override
public void paintComponent(Graphics g) {
// Check if parent's parent is the combobox or the dropdown
int part = getParent().getParent() == list ? 0 : 1;
label.setText(label.getText().split("\\|")[part]);
super.paintComponent(g);
}
};
@Override
public Component getListCellRendererComponent(JList<? extends String> list, String value, int index, boolean isSelected, boolean cellHasFocus) {
this.list = list;
label.setText(value);
label.setOpaque(true);
if (isSelected) {
label.setForeground(list.getSelectionForeground());
label.setBackground(list.getSelectionBackground());
} else {
label.setForeground(list.getForeground());
label.setBackground(list.getBackground());
}
return label;
}
});
注:上面的示例沒有正確處理各方面(如重點邊境...),但僅僅是一個提示你如何進一步進行。
你能粘貼與這個問題有關的代碼嗎? – asgs