`

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
分享到:
评论

相关推荐

    java swing管理系统源码 程序 代码 图形界面(11套).zip

    Java Swing是Java编程语言中的一个图形用户界面(GUI)工具包,它是Java Foundation Classes (JFC)的一部分,用于构建桌面应用程序。本压缩包包含了11套完整的Java Swing管理系统源码,这些源码对于学习和理解Java GUI...

    JavaSwing界面设计(所有控件及示例)

    Java Swing 是Java编程语言中用于构建图形用户界面(GUI)的一个强大的工具包。它是对早期的Abstract Window Toolkit (AWT) 的扩展,提供了更丰富的功能和更好的平台独立性。Swing 包含了大量的组件,使得开发者可以...

    最全的Java Swing示例程序

    这个“最全的Java Swing示例程序”集合包含了Swing库中的各种组件和功能的实例,对于学习和理解Swing编程非常有帮助。 Swing组件包括但不限于: 1. JFrame:这是Swing中的顶级容器,通常作为应用程序的主窗口。你...

    java swing界面设计

    - "Java图形用户界面设计(Swing常用组件).ppt"和"JavaSwing界面设计(所有控件及示例).ppt"两个文件中可能包含了各种Swing组件的使用示例和实际应用,建议仔细学习和实践。 9. **学习资源** - Java官方文档:提供...

    java SWING 做的通讯录

    此外,Swing还支持其他的监听器,如ItemListener(用于复选框或单选按钮)、MouseListener(处理鼠标事件)等,可以根据需求灵活应用。 为了提供更好的用户体验,Swing应用还可以通过布局管理器来调整组件的位置和...

    java swing

    Java Swing是Java编程语言中的一个图形用户界面(GUI)工具包,它是Java Foundation Classes (JFC)的一部分。Swing提供了一套丰富的组件,用于创建桌面应用程序,包括按钮、文本框、菜单、滚动面板等。Swing是完全由...

    JAVA SWING 图书管理系统

    Swing中的事件处理是通过监听器实现的,例如ActionListener用于处理按钮点击事件,ItemListener用于处理单选按钮或复选框的选择变化。在图书管理系统中,可以通过监听用户操作,如点击“搜索”按钮时触发查询书籍的...

    java swing学习资料

    - `JCheckBox`、`JRadioButton`:提供复选框和单选按钮功能。 - `JComboBox`、`JList` 和 `JTable`:用于数据展示和交互,如下拉列表、列表视图和表格。 2. **事件处理**: - Swing使用事件监听器模型来处理用户...

    Java Swing 组件全演示源代码.rar_java swing_java 组件_java swing_java源代码_

    Swing 提供了大量的组件,包括基础组件如按钮(JButton)、文本框(JTextField)、标签(JLabel)、复选框(JCheckBox)、单选按钮(JRadioButton)、滚动面板(JScrollPane)以及更复杂的组件如表格(JTable)、...

    javaSwing教程

    1. **基础组件**:Swing中的基础组件包括JButton(按钮)、JLabel(标签)、JTextField(文本字段)、JTextArea(多行文本区域)、JComboBox(组合框)、JCheckBox(复选框)、JRadioButton(单选按钮)和...

    java swing所有组件展示 (附源码)

    Java Swing 是Java编程语言中用于构建桌面应用程序的图形用户界面(GUI)工具包。它属于Java Foundation Classes (JFC)的一部分,提供了丰富的组件库,使得开发者可以创建出具有专业外观和交互性的应用。本资源...

    Java Swing数据模型

    Java Swing 是Java GUI库的一部分,用于构建桌面应用程序。在Swing中,数据模型是一个关键概念,它将数据和用户界面的表示分离开来,使得代码更易于管理和维护。以下是关于"Java Swing数据模型"的详细解释: 1. **...

    Java Swing图形界面开发与案例详解

    在Swing中,开发者可以创建各种窗口组件,如按钮(JButton)、文本框(JTextField)、标签(JLabel)、复选框(JCheckBox)、单选按钮(JRadioButton)、滚动面板(JScrollPane)以及菜单(JMenu)等。这些组件通过...

    Apress - The Definitive Guide to Java Swing, Third Edition.pdf

    - **ItemListener**: 用于处理复选框或单选按钮的状态改变事件。 - **定制与美化**:Swing 允许开发者高度定制组件的外观和行为,包括但不限于: - **UI 代理**: 通过设置不同的 LookAndFeel 来改变应用程序的...

    java swing 的类似几个windows风格的控件

    7. **JRadioButton** 和 **JCheckBox**: 这两者分别代表单选按钮和复选框,它们允许用户在多个选项中进行选择,而JRadioButton则限制只能选择一个。 8. **JTable**: JTable 用于展示表格数据,用户可以查看和编辑...

    JAVA swing实现简单的学生管理系统.zip

    6. **事件监听器**:Swing组件支持多种类型的事件监听,例如ActionListener(按钮点击)、ItemListener(复选框或单选按钮选择)等。开发者需要为各个组件添加合适的监听器,以响应用户的交互行为。 7. **设计模式*...

    java精通swing程序设计

    Swing中的主要组件包括按钮(JButton)、文本框(JTextField)、标签(JLabel)、复选框(JCheckBox)、单选按钮(JRadioButton)、滚动条(JScrollPane)、列表(JList)、表格(JTable)、树(JTree)以及对话框...

    javaswing代码

    - **选中状态**:对于某些组件,如复选框或单选按钮,可以通过`setSelected(true)`方法使其处于选中状态。 - **查询选中状态**:通过调用`isSelected()`方法来查询当前是否被选中。 #### 5. 用户交互 - **焦点管理...

    javaswing学习教程

    Java Swing 是Java GUI(图形用户界面)开发的重要库,它属于Java Foundation Classes (JFC) 的一部分。Swing 提供了一系列组件,用于构建美观、功能丰富的桌面应用程序。本教程将全面解析Java Swing的相关知识点,...

    JAVA Swing常用组件

    Java Swing 是Java GUI(图形用户界面)库的一部分,它提供了丰富的组件来构建桌面应用程序。Swing 是在AWT(Abstract Window Toolkit)的基础上构建的,提供了更丰富的功能和更好的外观,尤其是在Windows、Mac OS X...

Global site tag (gtag.js) - Google Analytics