import java.awt.Color;
import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

 

import javax.swing.JCheckBox;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.table.DefaultTableModel;

 

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.JCheckBox;

import javax.swing.JOptionPane;

 

import javax.swing.UIManager;

import javax.swing.table.TableCellRenderer;

 

public class JButtonTableExample extends JFrame {

 

    public JButtonTableExample() {

        super("JButtonTable Example");

 

        DefaultTableModel dm = new DefaultTableModel();

        dm.setDataVector(new Object[][] { { "button 1", "foo" },

                { "button 2", "bar" } }, new Object[] { "Button", "String" });

 

        JTable table = new JTable(dm);

        table.setOpaque(true);

        table.setBackground(Color.red);

        table.getColumn("Button").setCellRenderer(new ButtonRenderer());

        table.getColumn("Button").setCellEditor(

                new ButtonEditor(new JCheckBox()));

        JScrollPane scroll = new JScrollPane(table);

        getContentPane().add(scroll);

        setSize(400, 100);

        setVisible(true);

    }

 

    public static void main(String[] args) {

        JButtonTableExample frame = new JButtonTableExample();

        frame.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {

                System.exit(0);

            }

        });

    }

}

 

class ButtonRenderer extends JButton implements TableCellRenderer {

 

    public ButtonRenderer() {

        setOpaque(true);

    }

 

    public Component getTableCellRendererComponent(JTable table, Object value,

            boolean isSelected, boolean hasFocus, int row, int column) {

        if (isSelected) {

            setForeground(table.getSelectionForeground());

            setBackground(table.getSelectionBackground());

        } else {

            setForeground(table.getForeground());

            setBackground(UIManager.getColor("Button.background"));

        }

        setText((value == null) ? "" : value.toString());

        return this;

    }

}

 

class ButtonEditor extends DefaultCellEditor {

    protected JButton button;

    private String label;

    private boolean isPushed;

 

    public ButtonEditor(JCheckBox checkBox) {

        super(checkBox);

        button = new JButton();

        button.setOpaque(true);

        button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                fireEditingStopped();

            }

        });

    }

 

    public Component getTableCellEditorComponent(JTable table, Object value,

            boolean isSelected, int row, int column) {

        if (isSelected) {

            button.setForeground(table.getSelectionForeground());

            button.setBackground(table.getSelectionBackground());

        } else {

            button.setForeground(table.getForeground());

            button.setBackground(table.getBackground());

        }

        label = (value == null) ? "" : value.toString();

        

        button.setText(label);

        isPushed = true;

        return button;

    }

 

    public Object getCellEditorValue() {

        if (isPushed) {

            JOptionPane.showMessageDialog(button, label + ": Ouch!");

        }

       isPushed = false;

        return new String(label);

    }

 

    public boolean stopCellEditing() {

       isPushed = false;

        return super.stopCellEditing();

    }

 

    protected void fireEditingStopped() {

        super.fireEditingStopped();

    }

}

一个关于JTabel的DefaultCellEditor渲染很棒的例子的更多相关文章

  1. Oracle,Sql,procedure 感觉自己写的很棒的一个存储过程

    感觉自己写的很棒的一个Oracle存储过程,(其实想说很叼^,^). 集成了一堆操作数据的功能(至少几十), 包括存储过程执行异常信息输出帮助诊断. 亮点很多, 比如`over(partition b ...

  2. 国外大神制作的一个很棒的matplotlib 可视化教程

    国外大神制作的一个很棒的matplotlib 可视化教程 参考:https://www.machinelearningplus.com/plots/top-50-matplotlib-visualiz ...

  3. Makefile经典教程(一个很棒很清晰的讲解)【转】

    转自:https://blog.csdn.net/seven_amber/article/details/70216216 该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神 ...

  4. EasyDropDown – 很棒的下拉菜单,含精美主题

    EasyDropDown 是一个 jQuery 插件,你可以毫不费力地将简陋的 Select 元素设置为可定制风格的下拉菜单,用于表单或者一般的导航.和著名的下拉插件 Chosen 很像,但是具有自己 ...

  5. 优秀工具推荐:两款很棒的 HTML5 游戏开发工具

    HTML5 众多强大特性让我们不需要多么高深技术就能创建好玩的网页游戏,同时证明了开放的 Web 技术能与任何其他在游戏开发中使用的技术竞争.正如标题所说,这篇文章推荐的几款很棒 HTML5 游戏开发 ...

  6. 11个很棒的 jQuery 图表库

    如果你曾经使用过任何类型的数据,你应该知道阅读一排排数据的痛苦.通过所有这些数据弄清楚他们的意思是非常不容易的.可视化对于解决这个问题起到了重要的作用.可视化降低了数据阅读的难度,帮助决策者获得可操作 ...

  7. 10个很棒的学习Android 开发的网站(转)

    看到江湖旅人 写的<10个很棒的学习iOS开发的网站 - 简书>,所以就忍不住写Android 啦,也希望对大家有帮助.我推荐的网站,都是我在学习Android 开发过程中发现的好网站,给 ...

  8. 推荐几款很棒的 JavaScript 表单美化和验证插件

    表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让开发者花费了大量的时间和精力去处理,以期实现好用又漂亮的表单功能 ...

  9. IOS学习资源收集--关于动画的代码学习资源总汇(很棒的动画效果哦)

    目录大纲: 1.很棒的iOS加载动画. github网址:https://github.com/NghiaTranUIT/FeSpinner 游老师的译文blog:http://www.cnblogs ...

随机推荐

  1. 51 EEPROM操作模板

    各个型号容量及扇区请查datasheet #include <reg52.h> #include "intrins.h" typedef unsigned char b ...

  2. UESTC_吴队长征婚 2015 UESTC Training for Search Algorithm & String<Problem E>

    E - 吴队长征婚 Time Limit: 10000/4000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  3. Multiple outputs from T4 made easy – revisited » DamienG

    Multiple outputs from T4 made easy – revisited » DamienG Multiple outputs from T4 made easy – revisi ...

  4. VC2010 Working Directory

    VC project setting --〉debug中的working directory指的是工作文件夹在哪里? project属性下,Debug以下的 Working Directory 是为了 ...

  5. linux内存操作----kernel 3.5.X copy_from_user()和copy_to_user()

    前面的一篇文章中简单的描写叙述了一下内存映射的内容,http://blog.csdn.net/codectq/article/details/25658813,这篇文章作为用户把内存规划好之后,在用户 ...

  6. 设计模式入门之职责链模式Chain Of Responsibility

    //职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. //实例:申请费用的功能,不同金额的费 ...

  7. sharepreference实现记住password功能

        SharePreference是用于保存数据用的.主要调用Context.getSharePreferences(String name, int mode)方法来得到SharePrefere ...

  8. Java中的内存泄漏问题

    今天来谈谈Java语言中的内存泄漏问题,可能还有人不知道什么是内存泄漏,先来说下内存泄漏的概念. 内存泄漏:比较正式的说法是,不再使用的对象,却不能被Java垃圾回收机回收.用我的话来说,就是Java ...

  9. jqGrid插件的重载表格的解决方案

    jqGrid插件的重载表格的解决方案 $("#table_list_1").empty();// 清空表格内容 var parent=$("#gbox_table_lis ...

  10. ASP.net+SQL server2008简单的数据库增删改查 VS2012

    工具:VS2012 数据库:SQL server 简单说明:根据老师上课给的代码,进行了简单的改正适用于VS2012环境,包括注册.登录.查询.修改.删除功能,多数参考了网上的代码 百度云源代码连接t ...