`

java swing表格中包含单选框

阅读更多

1,如何让表单中显示单选框呢?

 

步骤一:设置表格数据

在表格的data中设置元素为JRadioButton

public void layoutTable( ) {//TODO
    	Object[][] datas=new Object[4][3];
    	for(int i=0;i<4;i++){
    		Object[]objs=new Object[3];
    		JPanel panel=new JPanel();
    		panel.add(new JRadioButton());
    		objs[0]=panel;
    		objs[1]="b"+i;
    		objs[2]="c"+i;
    		datas[i]=objs;
    	}
    	DefaultTableModel model = new DefaultTableModel(datas, columnNames);
    	parameterTable_1.setModel(model);
    	this.parameterTable_1.setRowHeight(30);
		
	}

 效果如图:

 

表格并没有显示控件,而是显示控件的对象信息,即调用了对象的toStirng() 方法

 

步骤二:设置setCellEditor

parameterTable_1.getColumnModel().getColumn(0)
		.setCellEditor(new MyButtonEditor());

 但是还是显示的对象信息,没有达到预期效果.但是鼠标点击时才显示控件

 

步骤三:设置setCellRenderer

parameterTable_1.getColumnModel().getColumn(0)
		.setCellRenderer(new MyButtonRender());

 达到了预期效果:

 

注意:

1,要同时有控件的cell的setCellEditor 和setCellRenderer

2,MyButtonEditor如下:

package com.yunma.table;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;

public class MyButtonEditor extends DefaultCellEditor
{
    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = -6546334664166791132L;

    private JPanel            panel;

    private JButton           button;
    private Object            obj              = null;

    public MyButtonEditor()
    {
        // DefautlCellEditor有此构造器,需要传入一个,但这个不会使用到,直接new一个即可。
        super(new JTextField());

        // 设置点击几次激活编辑。
        this.setClickCountToStart(1);

//        this.initButton();
//
//        this.initPanel();
//
//        // 添加按钮。
//        this.panel.add(this.button);
    }

    private void initButton()
    {
        this.button = new JButton();

        // 设置按钮的大小及位置。
        this.button.setBounds(0, 0, 100, 15);

        // 为按钮添加事件。这里只能添加ActionListner事件,Mouse事件无效。
        this.button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                // 触发取消编辑的事件,不会调用tableModel的setValue方法。
                //                MyButtonEditor.this.fireEditingCanceled();
                System.out.println(button.getText() + " is pressed");
                // 这里可以做其它操作。
                // 可以将table传入,通过getSelectedRow,getSelectColumn方法获取到当前选择的行和列及其它操作等。
            }
        });

    }

    private void initPanel()
    {
        this.panel = new JPanel();

        // panel使用绝对定位,这样button就不会充满整个单元格。
        this.panel.setLayout(null);
    }

    /**
     * 这里重写父类的编辑方法,返回一个JPanel对象即可(也可以直接返回一个Button对象,但是那样会填充满整个单元格)
     */
    @Override
    public Component getTableCellEditorComponent(JTable table, Object value,
            boolean isSelected, int row, int column)
    {
        // 只为按钮赋值即可。也可以作其它操作。

        obj = value;

        return (JComponent) value;

    }

    /**
     * 重写编辑单元格时获取的值。如果不重写,这里可能会为按钮设置错误的值。
     * will be invoke when editable and losing focus
     */
    @Override
    public Object getCellEditorValue()
    {
        return obj;

    }
}

 3,MyButtonRender 代码如下:

package com.yunma.table;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;


public class MyButtonRender implements TableCellRenderer
{

    public MyButtonRender()
    {
    }

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
            int column)
    {
        // 只为按钮赋值即可。也可以作其它操作,如绘背景等。
        /***
         * code below is useless
         */
//        this.button.addActionListener(new ActionListener()
//        {
//            
//            @Override
//            public void actionPerformed(ActionEvent e)
//            {
//                System.out.println("a:"+button.getText());
//            }
//        });
        return (Component)value;
    }
}

 

 

 

  • 大小: 42.5 KB
  • 大小: 27.2 KB
  • 大小: 15.6 KB
0
0
分享到:
评论

相关推荐

    ExtJS(ajax框架) 4.2.1

    ExtJs最开始基于YUI技术,由开发人员 JackSlocum开发,通过参考JavaSwing等机制来组织可视化组件,无论从UI界面上CSS样式的应用,到数据解析上的异常处理,都可算是 一款不可多得的JavaScript客户端技术的精品。 ...

    java联想(中文)

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...

    Thinking in Java简体中文(全)

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...

    Java开发详解.zip

    000000_【课程介绍 —— 写在前面的话】_Java学习概述笔记.pdf 010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA概述及开发环境搭建】_Java开发环境搭建笔记.pdf 010201_【第2...

    Thinking in Java 中文第四版+习题答案

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...

    java初学者必看

    13.3.3 单选框(JRadioButton) 13.3.4 组合框(JComboBox) 13.3.5 进程条(JprogressBar) 13.3.6 表格(JTable) 13.3.7 树(JTree) 13.3.8 文本框(JTextField)与文本区(JTextArea) 13.4 布局管理器 13.4.1 ...

    java 编程入门思考

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...

    Java初学者入门教学

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...

    JAVA_Thinking in Java

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...

    java窗体GUI所有组件学习

    String uesd2[] = { "滑块","复选框", "下拉菜单", "列表", "表格", "树状" }; String layout[] = { "流式布局", "边界布局", "网格布局" }; // Jpanelitem,Jscrollpaneitem,Splitpaneitem,JTabbedpanelitem,...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm ------------------------------------------------- 本教程由yyc,spirit整理 ------------------------------------------------- “Thinking in Java...

    Think in Java(中文版)chm格式

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 ...

    JAVA项目开发全程实录(含电子书和所有源代码)

    5.11.2 窗体中单选按钮即时显示 243 5.12 格式化的文本框 243 5.12.1 使用JFormattedTextField限制整型 数字输入 244 5.12.2 使用JFormattedTextField限制日期 输入 244 5.13 本章总结 245 第6章 企业快信(Swing+...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...

    Java开发技术大全 电子版

    第4篇Java中的高级技术 第8章Java的多线程机制266 8.1线程的概念266 8.1.1多线程的特点266 8.1.2线程的状态267 8.2Thread类268 8.2.1Thread类的构造方法268 8.2.2Thread类的常用方法268 8.3多线程程序的编写...

    javaSE代码实例

    6.9.2 Java中的GregorianCalendar类 96 6.9.3 擅用系统已有类的思想 98 6.10 小结 99 第7章 访问控制——Java世界的卫兵 100 7.1 包的使用 100 7.1.1 声明创建包 100 7.1.2 引入包内的资源 102 7.1.3...

Global site tag (gtag.js) - Google Analytics