1+ import java .awt .BorderLayout ;
2+ import java .awt .Component ;
3+ import java .awt .GridLayout ;
4+ import java .awt .Rectangle ;
5+ import java .awt .event .ActionEvent ;
6+ import java .awt .event .ActionListener ;
7+ import java .awt .event .MouseAdapter ;
8+ import java .awt .event .MouseEvent ;
9+ import java .awt .event .WindowAdapter ;
10+ import java .awt .event .WindowEvent ;
11+ import java .io .Serializable ;
12+
13+ import javax .swing .JButton ;
14+ import javax .swing .JCheckBox ;
15+ import javax .swing .JFrame ;
16+ import javax .swing .JList ;
17+ import javax .swing .JPanel ;
18+ import javax .swing .JScrollPane ;
19+ import javax .swing .JTextArea ;
20+ import javax .swing .ListCellRenderer ;
21+ import javax .swing .ListModel ;
22+ import javax .swing .ListSelectionModel ;
23+ import javax .swing .UIManager ;
24+ import javax .swing .border .EmptyBorder ;
25+
26+ public class JFrameTest extends JFrame {
27+
28+ public JFrameTest () {
29+ super ("CheckList Example" );
30+ String [] strs = { "swing" , "home" , "basic" , "metal" , "JList" };
31+
32+ final JList list = new JList (createData (strs ));
33+
34+ list .setCellRenderer (new CheckListRenderer ());
35+ list .setSelectionMode (ListSelectionModel .SINGLE_SELECTION );
36+ list .setBorder (new EmptyBorder (0 , 4 , 0 , 0 ));
37+ list .addMouseListener (new MouseAdapter () {
38+ public void mouseClicked (MouseEvent e ) {
39+ int index = list .locationToIndex (e .getPoint ());
40+ CheckableItem item = (CheckableItem ) list .getModel ()
41+ .getElementAt (index );
42+ item .setSelected (!item .isSelected ());
43+ Rectangle rect = list .getCellBounds (index , index );
44+ list .repaint (rect );
45+ }
46+ });
47+ JScrollPane sp = new JScrollPane (list );
48+
49+ final JTextArea textArea = new JTextArea (3 , 10 );
50+ JScrollPane textPanel = new JScrollPane (textArea );
51+ JButton printButton = new JButton ("print" );
52+ printButton .addActionListener (new ActionListener () {
53+ public void actionPerformed (ActionEvent e ) {
54+ ListModel model = list .getModel ();
55+ int n = model .getSize ();
56+ for (int i = 0 ; i < n ; i ++) {
57+ CheckableItem item = (CheckableItem ) model .getElementAt (i );
58+ if (item .isSelected ()) {
59+ textArea .append (item .toString ());
60+ textArea .append (System .getProperty ("line.separator" ));
61+ }
62+ }
63+ }
64+ });
65+ JButton clearButton = new JButton ("clear" );
66+ clearButton .addActionListener (new ActionListener () {
67+ public void actionPerformed (ActionEvent e ) {
68+ textArea .setText ("" );
69+ }
70+ });
71+ JPanel panel = new JPanel (new GridLayout (2 , 1 ));
72+ panel .add (printButton );
73+ panel .add (clearButton );
74+
75+ getContentPane ().add (sp , BorderLayout .CENTER );
76+ getContentPane ().add (panel , BorderLayout .EAST );
77+ getContentPane ().add (textPanel , BorderLayout .SOUTH );
78+ }
79+
80+ private CheckableItem [] createData (String [] strs ) {
81+ int n = strs .length ;
82+ CheckableItem [] items = new CheckableItem [n ];
83+ for (int i = 0 ; i < n ; i ++) {
84+ items [i ] = new CheckableItem (strs [i ]);
85+ }
86+ return items ;
87+ }
88+
89+ class CheckableItem implements Serializable {
90+ private String str ;
91+
92+ private boolean isSelected ;
93+
94+ public CheckableItem (String str ) {
95+ this .str = str ;
96+ isSelected = false ;
97+ }
98+
99+ public void setSelected (boolean b ) {
100+ isSelected = b ;
101+ }
102+
103+ public boolean isSelected () {
104+ return isSelected ;
105+ }
106+
107+ public String toString () {
108+ return str ;
109+ }
110+ }
111+
112+ class CheckListRenderer extends JCheckBox implements ListCellRenderer {
113+
114+ public CheckListRenderer () {
115+ setBackground (UIManager .getColor ("List.textBackground" ));
116+ setForeground (UIManager .getColor ("List.textForeground" ));
117+ }
118+
119+ public Component getListCellRendererComponent (JList list , Object value ,
120+ int index , boolean isSelected , boolean hasFocus ) {
121+ setEnabled (list .isEnabled ());
122+ setSelected (((CheckableItem ) value ).isSelected ());
123+ setFont (list .getFont ());
124+ setText (value .toString ());
125+ return this ;
126+ }
127+ }
128+
129+ public static void main (String args []) {
130+ try {
131+ UIManager .setLookAndFeel ("com.sun.java.swing.plaf.windows.WindowsLookAndFeel" );
132+ } catch (Exception evt ) {
133+ }
134+
135+ JFrameTest frame = new JFrameTest ();
136+ frame .addWindowListener (new WindowAdapter () {
137+ public void windowClosing (WindowEvent e ) {
138+ System .exit (0 );
139+ }
140+ });
141+ frame .setSize (300 , 200 );
142+ frame .setVisible (true );
143+ }
144+ }
0 commit comments