Create a JCheckBox List Control in Java
Description
The following code shows how to create a JCheckBox List Control.
Example
/**/* w w w .jav a 2s. c o m*/
*
* @author gtoffoli
*/
import java.awt.Color;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
public class Main{
public static void main(String[] argv){
JFrame frame = new JFrame("JCheckBox Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
CheckBoxList checkBoxList = new CheckBoxList();
DefaultListModel model = ((DefaultListModel)checkBoxList.getModel());
model.addElement(new CheckBoxListEntry("java2s.com",false));
model.addElement(new CheckBoxListEntry("java2s.com",false));
model.addElement(new CheckBoxListEntry("java2s.com",false));
model.addElement(new CheckBoxListEntry("java2s.com",false));
model.addElement(new CheckBoxListEntry("java2s.com",false));
model.addElement(new CheckBoxListEntry("java2s.com",false));
model.addElement(new CheckBoxListEntry("java2s.com",false));
model.addElement(new CheckBoxListEntry("java2s.com",false));
frame.add(new JScrollPane(checkBoxList));
frame.pack();
frame.setVisible(true);
}
}
class CheckBoxList extends JList {
public CheckBoxList() {
super();
setModel(new DefaultListModel());
setCellRenderer(new CheckboxCellRenderer());
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
int index = locationToIndex(e.getPoint());
if (index != -1) {
Object obj = getModel().getElementAt(index);
if (obj instanceof JCheckBox) {
JCheckBox checkbox = (JCheckBox) obj;
checkbox.setSelected(!checkbox.isSelected());
repaint();
}
}
}
}
);
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
@SuppressWarnings("unchecked")
public int[] getCheckedIdexes() {
java.util.List list = new java.util.ArrayList();
DefaultListModel dlm = (DefaultListModel) getModel();
for (int i = 0; i < dlm.size(); ++i) {
Object obj = getModel().getElementAt(i);
if (obj instanceof JCheckBox) {
JCheckBox checkbox = (JCheckBox) obj;
if (checkbox.isSelected()) {
list.add(new Integer(i));
}
}
}
int[] indexes = new int[list.size()];
for (int i = 0; i < list.size(); ++i) {
indexes[i] = ((Integer) list.get(i)).intValue();
}
return indexes;
}
@SuppressWarnings("unchecked")
public java.util.List getCheckedItems() {
java.util.List list = new java.util.ArrayList();
DefaultListModel dlm = (DefaultListModel) getModel();
for (int i = 0; i < dlm.size(); ++i) {
Object obj = getModel().getElementAt(i);
if (obj instanceof JCheckBox) {
JCheckBox checkbox = (JCheckBox) obj;
if (checkbox.isSelected()) {
list.add(checkbox);
}
}
}
return list;
}
}
class CheckboxCellRenderer extends DefaultListCellRenderer {
protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
public Component getListCellRendererComponent(JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
if (value instanceof CheckBoxListEntry) {
CheckBoxListEntry checkbox = (CheckBoxListEntry) value;
checkbox.setBackground(isSelected ? list.getSelectionBackground() : list.getBackground());
if (checkbox.isRed()) {
checkbox.setForeground(Color.red);
} else {
checkbox.setForeground(isSelected ? list.getSelectionForeground() : list.getForeground());
}
checkbox.setEnabled(isEnabled());
checkbox.setFont(getFont());
checkbox.setFocusPainted(false);
checkbox.setBorderPainted(true);
checkbox.setBorder(isSelected ? UIManager.getBorder("List.focusCellHighlightBorder")
: noFocusBorder);
return checkbox;
} else {
return super.getListCellRendererComponent(list, value.getClass().getName(), index,
isSelected, cellHasFocus);
}
}
}
class CheckBoxListEntry extends JCheckBox {
private Object value = null;
private boolean red = false;
public CheckBoxListEntry(Object itemValue, boolean selected) {
super(itemValue == null ? "" : "" + itemValue, selected);
setValue(itemValue);
}
public boolean isSelected() {
return super.isSelected();
}
public void setSelected(boolean selected) {
super.setSelected(selected);
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public boolean isRed() {
return red;
}
public void setRed(boolean red) {
this.red = red;
}
}
/*
* Copyright (C) 2005 - 2007 JasperSoft Corporation. All rights reserved.
* http://www.jaspersoft.com.
*
* Unless you have purchased a commercial license agreement from JasperSoft, the
* following license terms apply:
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2 as published by the
* Free Software Foundation.
*
* This program is distributed WITHOUT ANY WARRANTY; and without the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, see http://www.gnu.org/licenses/gpl.txt or write to:
*
* Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA USA
* 02111-1307
*
*
*
*
* CheckBoxListEntry.java
*
* Created on October 5, 2006, 10:19 AM
*
*/
The code above generates the following result.
Home »
Java Tutorial »
Swing »
Java Tutorial »
Swing »