[英]Java GUI Swing Jlist with three Components
在沒有任何真實信息的情況下,我能建議的最好方法是先查看概念:編輯器和渲染器和編寫自定義單元渲染器,了解單元渲染的工作原理。
根據您的基本要求,您需要從某種容器類開始並將您的組件添加到其中,然后您需要在每次調用getListCellRendererComponent
使用它提供的數據填充組件的值。
您還需要處理選擇渲染,因為這通常由DefaultListCellRenderer
舉個例子...
public static class CustomListCellRenderer extends JPanel implements ListCellRenderer<Data> {
private static final Border DEFAULT_NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1);
private JCheckBox checkBox;
private JLabel label;
public CustomListCellRenderer() {
setOpaque(false);
setLayout(new FlowLayout(FlowLayout.LEFT));
setBorder(DEFAULT_NO_FOCUS_BORDER);
checkBox = new JCheckBox();
label = new JLabel();
checkBox.setOpaque(false);
add(checkBox);
add(label);
}
@Override
public Component getListCellRendererComponent(JList<? extends Data> list, Data value, int index, boolean isSelected, boolean cellHasFocus) {
checkBox.setSelected(value.isSelecetd());
label.setIcon(new ImageIcon(value.getImage()));
label.setText(value.getText());
Color fg = list.getForeground();
if (isSelected) {
setBackground(list.getSelectionBackground());
fg = list.getSelectionForeground();
}
label.setForeground(fg);
setOpaque(isSelected);
Border border = null;
if (cellHasFocus) {
if (isSelected) {
border = UIManager.getBorder("List.focusSelectedCellHighlightBorder");
}
if (border == null) {
border = UIManager.getBorder("List.focusCellHighlightBorder");
}
} else {
border = DEFAULT_NO_FOCUS_BORDER;
}
setBorder(border);
return this;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.