⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checkboxjlist.java

📁 oraily的Swing hacks code
💻 JAVA
字号:
import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.util.*;public class CheckBoxJList extends JList    implements ListSelectionListener {    static Color listForeground, listBackground,        listSelectionForeground,        listSelectionBackground;    static {        UIDefaults uid = UIManager.getLookAndFeel().getDefaults();        listForeground =  uid.getColor ("List.foreground");        listBackground =  uid.getColor ("List.background");        listSelectionForeground =  uid.getColor ("List.selectionForeground");        listSelectionBackground =  uid.getColor ("List.selectionBackground");    }    HashSet selectionCache = new HashSet();    int toggleIndex = -1;    boolean toggleWasSelected;    public CheckBoxJList() {        super();        setCellRenderer (new CheckBoxListCellRenderer());        addListSelectionListener (this);    }    // ListSelectionListener implementation    public void valueChanged (ListSelectionEvent lse) {        System.out.println (lse);        if (! lse.getValueIsAdjusting()) {            removeListSelectionListener (this);            // remember everything selected as a result of this action            HashSet newSelections = new HashSet();            int size = getModel().getSize();            for (int i=0; i<size; i++) {                if (getSelectionModel().isSelectedIndex(i)) {                    newSelections.add (new Integer(i));                }            }            // turn on everything that was previously selected            Iterator it = selectionCache.iterator();            while (it.hasNext()) {                int index = ((Integer) it.next()).intValue();                System.out.println ("adding " + index);                getSelectionModel().addSelectionInterval(index, index);            }            // add or remove the delta            it = newSelections.iterator();            while (it.hasNext()) {                Integer nextInt = (Integer) it.next();                int index = nextInt.intValue();                if (selectionCache.contains (nextInt))                    getSelectionModel().removeSelectionInterval (index, index);                else                    getSelectionModel().addSelectionInterval (index, index);            }            // save selections for next time            selectionCache.clear();            for (int i=0; i<size; i++) {                if (getSelectionModel().isSelectedIndex(i)) {                    System.out.println ("caching " + i);                    selectionCache.add (new Integer(i));                }            }            addListSelectionListener (this);        }    }    public static void main (String[] args) {        JList list = new CheckBoxJList ();        DefaultListModel defModel = new DefaultListModel();        list.setModel (defModel);        String[] listItems = {            "Chris", "Joshua", "Daniel", "Michael",            "Don", "Kimi", "Kelly", "Keagan"        };        Iterator it = Arrays.asList(listItems).iterator();        while (it.hasNext())            defModel.addElement (it.next());        // show list        JScrollPane scroller =            new JScrollPane (list,                            ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,                            ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);        JFrame frame = new JFrame ("Checkbox JList");        frame.getContentPane().add (scroller);        frame.pack();        frame.setVisible(true);    }    class CheckBoxListCellRenderer extends JComponent         implements ListCellRenderer {        DefaultListCellRenderer defaultComp;        JCheckBox checkbox;        public CheckBoxListCellRenderer() {            setLayout (new BorderLayout());            defaultComp = new DefaultListCellRenderer();            checkbox = new JCheckBox();            add (checkbox, BorderLayout.WEST);            add (defaultComp, BorderLayout.CENTER);        }        public Component getListCellRendererComponent(JList list,                                                      Object  value,                                                      int index,                                                      boolean isSelected,                                                      boolean cellHasFocus){            defaultComp.getListCellRendererComponent (list, value, index,                                                      isSelected, cellHasFocus);            /*            checkbox.setSelected (isSelected);            checkbox.setForeground (isSelected ?                                    listSelectionForeground :                                    listForeground);            checkbox.setBackground (isSelected ?                                    listSelectionBackground :                                    listBackground);            */            checkbox.setSelected (isSelected);            Component[] comps = getComponents();            for (int i=0; i<comps.length; i++) {                comps[i].setForeground (listForeground);                comps[i].setBackground (listBackground);            }            return this;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -