簡體   English   中英

具有三個組件的 Java GUI Swing Jlist

[英]Java GUI Swing Jlist with three Components

我需要創建一個包含三個組件的Java Swing JList

每個 JList 行應該有一個 JCheckBox、一個 ImageIcon 和一個 JLabel。 問題是 JLabel 只能有兩個元素。 所以我需要一種方法來添加 JCheckBox ...

Jlist 包含三個組件:-

在此處輸入圖片說明

在沒有任何真實信息的情況下,我能建議的最好方法是先查看概念:編輯器和渲染器編寫自定義單元渲染器,了解單元渲染的工作原理。

根據您的基本要求,您需要從某種容器類開始並將您的組件添加到其中,然后您需要在每次調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM