认识JCheckBox
程序可以通过JRadioButton实现单选按钮的功能,那么如果要实现复选框的功能,则可以使用JCheckBox完成。JCheckBox的常用方法下表所示。
序号 | 方法 | 描述 |
---|---|---|
1 | public JCheckBox(Icon icon) | 创建有一个图标、最初未被选定的复选框。 |
2 | public JCheckBox(Icon icon, boolean selected) | 创建一个带图标的复选框,并指定其最初是否处于选定状态。 |
3 | public JCheckBox(String text) | 创建一个带文本的、最初未被选定的复选框。 |
4 | public JCheckBox(String text, boolean selected) | 创建一个带文本的复选框,并指定其最初是否处于选定状态。 |
5 | JCheckBox(String text, Icon icon) | 创建带有指定文本和图标的、最初未选定的复选框。 |
6 | JCheckBox(String text, Icon icon, boolean selected) | 创建一个带文本和图标的复选框,并指定其最初是否处于选定状态。 |
JCheckBox的其他使用方法和JRadioButton的操作类似。
实例:定义复选框
package java1.swing.buttons;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JCheckBox;
import javax.swing.BorderFactory;
class MyCheckBox
{
// 窗体
private JFrame frame = new JFrame("使用复选框"); // 定义窗体
private Container cont = frame.getContentPane(); // 得到窗体容器
private JCheckBox jcb1 = new JCheckBox("复选框1"); // 定义一个复选框
private JCheckBox jcb2 = new JCheckBox("复选框2"); // 定义一个复选框
private JCheckBox jcb3 = new JCheckBox("复选框3"); // 定义一个复选框
private JPanel pan = new JPanel();
public MyCheckBox()
{
pan.setBorder(BorderFactory.createTitledBorder("多选:"));
pan.setLayout(new GridLayout(1, 3)); // 设置组件的排版
pan.add(this.jcb1); // 增加组件
pan.add(this.jcb2); // 增加组件
pan.add(this.jcb3); // 增加组件
cont.add(pan); // 将面板加入到容器之中
this.frame.setSize(330, 80);
this.frame.setVisible(true); // 设置可显示
// 监听窗体关闭事件
this.frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent arg)
{
System.exit(1);
}
});
}
}
public class JCheckBoxDemo01
{
public static void main(String args[])
{
new MyCheckBox();
}
}
运行结果:
对比之前的单选按钮样式:
我们可以发现与单选按钮样式不同的是多选框是正方形的,单选按钮时圆形的。这和其他系统中常见的单选按钮,复选框样式都是一样的。
选择的时候样式对比:
选中单选按钮时:
选中复选框时:
对比发现,选中单选按钮时,会在单选按钮中显示黑原点,而复选框中则会打钩。JCheckBox事件处理
JCheckBox和JRadioButton的事件监听接口是一样的,都是使用ItemListener接口。
package java1.swing.buttons;
import java.io.File;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import javax.swing.JFrame;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JCheckBox;
import javax.swing.BorderFactory;
//实现ItemListener接口方式监听复选框事件
class MyItemListener implements ItemListener
{
private String right ="D:\\dev\\java\\my\\icon\\my\\right.png";
//实现ItemListener的方法,只有一个方法。
public void itemStateChanged(ItemEvent e)
{
//得到产生的事件,这里只有复选框所以可以强制类型转换。
JCheckBox jcb = (JCheckBox) e.getItem(); // 得到产生的事件
// 如果被选中了,则显示正确的图片
if (jcb.isSelected())
{ //显示打钩
jcb.setIcon(new ImageIcon(right));
} else
{
//取消图片显示
jcb.setIcon(null);
}
}
}
class MyCheckBox1
{
private JFrame frame = new JFrame("多选框事件处理"); // 定义窗体
private Container cont = frame.getContentPane(); // 得到窗体容器
private JCheckBox jcb1 = new JCheckBox("CSDN"); // 定义一个复选框
private JCheckBox jcb2 = new JCheckBox("Google"); // 定义一个复选框
private JCheckBox jcb3 = new JCheckBox("GitHub"); // 定义一个复选框
private JPanel pan = new JPanel();
public MyCheckBox1()
{
pan.setBorder(BorderFactory.createTitledBorder("请选择你常用的网站"));
pan.setLayout(new GridLayout(1, 3)); // 设置组件的排版
pan.add(this.jcb1); // 增加组件
pan.add(this.jcb2); // 增加组件
pan.add(this.jcb3); // 增加组件
jcb1.addItemListener(new MyItemListener());
jcb2.addItemListener(new MyItemListener());
jcb3.addItemListener(new MyItemListener());
cont.add(pan); // 将面板加入到容器之中
this.frame.setSize(400, 100);
this.frame.setVisible(true);
//监听窗体关闭事件
this.frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent arg)
{
System.exit(1);
}
});
}
}
public class JCheckBoxDemo02
{
public static void main(String args[])
{
new MyCheckBox1();
}
}
打钩图片:right.png
打叉图片: wrong.png
运行结果:
点击复选框,则发生ItemListener事件,监听器监听到该事件,并得到发生该事件的复选按钮对象的引用jcb ,然后可以通过引用jcb来设置提示图片:
- 如选中CSDN按钮,则会在按钮前面显示打钩的图片。
- 取消选中CSDN,则图片消失
- 多选:
上面的程序功能与JRadionButton的事件监听操作非常的类似,当选好选型后根据选定的状态为按钮设置显示的图片。