`
yedaya
  • 浏览: 21234 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用定制JCheckBox 实现 “伪”三态复选框

阅读更多

项目本来需要一个带有复选框的树形控件,于是我找到了JIDE里的一个开源控件,研究了一下,发现无法实现需要的功能,而我自己又比较水,在网上找到的其他代码都不会用,只好自己写一个简单的,有些“旁门左道”的感觉...下面是实现代码:

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.image.BufferedImage;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.util.Random;

import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;

public class HGCheckBoxTest extends JCheckBox implements ActionListener{
	public static final int ALL_SELECTED =1;
	public static final int NONE_SELECTED = 2;
	public static final int SOME_SELECTED = 3;
	int state = NONE_SELECTED;
	public HGCheckBoxTest(int state){
		super();
		this.addActionListener(this);
		this.state = state;
	}
	public HGCheckBoxTest(Action a){
		super(a);		
	}
	
	public void paintComponent(Graphics g){
		if(state == SOME_SELECTED){
			
			this.setSelected(true);
			float[] my_kernel = {
		            0.10f, 0.10f, 0.10f,
		            0.10f, 0.20f, 0.10f,
		            0.10f, 0.10f, 0.10f };
		    ConvolveOp op = new ConvolveOp(new Kernel(3,3, my_kernel), ConvolveOp.EDGE_NO_OP, null);
		    BufferedImage buf = new BufferedImage(getWidth(),getHeight(), BufferedImage.TYPE_INT_RGB);
		    super.paintComponent(buf.getGraphics());
		    Image img = op.filter(buf,null);
		    g.drawImage(img,0,0,null);
		       
		}else{
			if(state==ALL_SELECTED){
				this.setSelected(true);
			}else if(state == NONE_SELECTED){
				this.setSelected(false);
			}
			super.paintComponent(g);
			
			return;
		}
	}
	public int getState() {
		return state;
	}
	public void setState(int state) {
		this.state = state;
	}
	static int i =1;
	public static void main(String[] args){
		JFrame frame = new JFrame("test CheckBox");
		final HGCheckBoxTest testBox = new HGCheckBoxTest(3); 
		JButton control = new JButton("change");
		control.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				int test = i++%3+1;				
				( testBox).setState(test);
				testBox.repaint();
			}
			
		});

		frame.getContentPane().add(testBox);
		frame.getContentPane().add("South",control);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(new Dimension(200,200));
		frame.setVisible(true);
	}
	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		int test = i++%2+1;	

		this.setState(test);
		
		//System.out.println(this.isSelected());
		//System.out.println(this.getState());
	}
}

 程序实例截图:



 项目截图:



 舍弃JIDE方案截图:



 原因:无法通过代码设置叶子节点的选择状态。

  • 大小: 2.8 KB
  • 大小: 9.8 KB
  • 大小: 11.2 KB
分享到:
评论

相关推荐

    Jtable中加入复选框的两种方法

    在这个例子中,我们使用JCheckBox组件来渲染复选框。 CheckBoxRenderer类的实现代码如下: ```java class CheckBoxRenderer implements TableCellRenderer { public Component getTableCellRendererComponent...

    swing table加复选框

    `DefaultCellEditor`通常使用`JCheckBox`作为其组件,这样我们就可以在`JTable`的单元格中看到复选框。 3. **设置列的类型和编辑器** 在`TableModel`中,我们需要为包含复选框的列指定`Boolean`类型,并使用之前...

    利用JAVA实现复选框捕捉器

    在这个小型实验程序中,我们聚焦于"复选框捕捉器"的实现,它能够捕获用户在复选框中的选择,并将这些信息实时地显示在文本框中,同时还可以将选定的内容保存到指定的文件中。如果目标文件不存在,程序会自动创建新...

    java Swing带复选框的树

    复选框树的实现主要涉及到以下几个关键知识点: 1. **JTree组件**:JTree是Swing中用于展示层次结构数据的组件,通常用来显示文件系统目录结构或自定义的树状数据。通过DefaultTreeModel或自定义的TreeModel来创建...

    实例12复选框(java实例系列)

    本实例"实例12复选框"深入探讨了如何在Java应用程序中使用JCheckBox类来实现这一功能。下面将详细阐述相关知识点。 1. **Swing组件库**: Swing是Java提供的一个图形用户界面(GUI)工具包,它是Java Foundation ...

    支持三态的树和复选框

    但引入三态后,JCheckBox也可以展示不确定状态,比如在一个复选框组中,如果部分复选框被选中,而部分未选中,那么整个组的复选框就可以显示为不确定状态。 这个名为"ansir_tristate1.1.0b5"的压缩包很可能包含了一...

    复选框的使用

    在本示例中,我们探讨的是如何实现复选框的功能,包括全选、全不选、反选以及获取选中状态的操作。这些功能在很多应用中都非常实用,例如在表单填写、设置配置或者多选项选择时。 首先,我们要了解复选框的基本概念...

    Java Swing组件复选框JCheckBox用法示例

    Java Swing组件复选框JCheckBox用法示例 Java Swing组件复选框JCheckBox是Swing中的一种基本组件,用于提供用户选择多个选项的功能。JCheckBox可以同时存在多个选项,并且每个选项都可以有两种状态:选中和未选中。...

    java 使用JCheckBox组件

    在Java Swing库中,`JCheckBox`是一种常用的图形用户界面(GUI)组件,它用于创建复选框。复选框允许用户从多个选项中选择一个或多个,而不仅仅是单个选项,如单选按钮(JRadioButton)所允许的那样。在本篇文章中,...

    swing复选框控制确认按钮置灰和进度条(Timer)例子

    JCheckBox是Swing中的复选框组件,它允许用户在多个选项中选择多个。通过监听复选框的状态变化,我们可以控制其他组件的行为。例如,当复选框被选中时,可以启用某个按钮;反之,如果复选框未被选中,则禁用该按钮。...

    checkbox实现复选框

    2. **Java/Swing**:在Java桌面应用中,我们可以使用`javax.swing.JCheckBox`类创建复选框。通过`ActionListener`接口处理点击事件。 ```java JCheckBox checkBox = new JCheckBox("Option 1"); checkBox....

    java通过复选框控件数组实现添加多个复选框控件示例分享

    在Java编程中,创建用户界面时,我们经常需要使用各种控件来收集用户输入,其中复选框(JCheckBox)是常见的交互元素之一,用于让用户从多个选项中选择多个喜好或同意某项条款。本示例讲解如何通过复选框控件数组...

    Java Swing JCheckBox复选框的实现方法

    Java Swing JCheckBox复选框的实现方法 Java Swing JCheckBox复选框是Java Swing中的一种常用控件,用于在图形用户界面中实现复选框的功能。在本文中,我们将详细介绍JCheckBox的实现方法,包括常用构造方法、常用...

    Java图形界面程序单选按钮、复选框、文本框、标签程序设计举例.pdf

    本实验旨在使学习者能够熟练掌握Java中的图形用户界面(GUI)组件,包括单选按钮、复选框、文本框和标签等基本元素的使用方法。通过实际操作和编程实践,学习者将深入了解这些组件的工作原理及其在实际项目中的应用...

    java swing带复选框的JList控件

    首先,`JList` 默认并不支持复选框,但我们可以使用 `DefaultListModel` 和 `ListCellRenderer` 来实现这一功能。`DefaultListModel` 用于存储列表中的项,而 `ListCellRenderer` 则负责定制每个列表项的显示方式,...

    Java中带复选框的树(Java CheckBox Tree)的实现和应用.doc

    点都被选中,则选中父结点 TreeNode parent = getParent(); if(parent != null && parent instanceof CheckBoxTreeNode) { CheckBoxTreeNode ...这样的实现方式可以满足在 Swing 应用中使用带复选框的树控件的需求。

    java之swing实现复选框的方法

    在Java的Swing库中,实现复选框(Checkbox)是一种常见的创建图形用户界面(GUI)的方法。复选框允许用户在多个选项中选择一个或多个。本篇将详细讲解如何利用Java Swing来创建和管理复选框,并通过实例代码进行解析...

    java下拉菜单复选框

    在Java中,我们通常会使用`JComboBox`作为下拉菜单的基础,配合`JCheckBox`实现复选功能。`JComboBox`可以扩展以添加自定义渲染器和监听器,使其能够显示并处理复选框。 1. **自定义组件**:在Java GUI中,我们可以...

    带CheckBox的JTable源代码

    对于复选框,我们可以使用`JCheckBox`作为渲染器。以下是一个基本的`TableCellRenderer`实现: ```java class CheckBoxRenderer extends JCheckBox implements TableCellRenderer { public Component ...

    java JCheckBox事件处理

    在Java Swing库中,`JCheckBox`是一种常用的用户界面组件,用于创建复选框,用户可以勾选或取消勾选来表示选择或否定一个选项。本篇文章将详细讲解如何在Java中处理`JCheckBox`的事件,以及相关知识点。 首先,`...

Global site tag (gtag.js) - Google Analytics