一个关于JTabel的DefaultCellEditor渲染很棒的例子
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渲染很棒的例子的更多相关文章
- Oracle,Sql,procedure 感觉自己写的很棒的一个存储过程
		感觉自己写的很棒的一个Oracle存储过程,(其实想说很叼^,^). 集成了一堆操作数据的功能(至少几十), 包括存储过程执行异常信息输出帮助诊断. 亮点很多, 比如`over(partition b ... 
- 国外大神制作的一个很棒的matplotlib 可视化教程
		国外大神制作的一个很棒的matplotlib 可视化教程 参考:https://www.machinelearningplus.com/plots/top-50-matplotlib-visualiz ... 
- Makefile经典教程(一个很棒很清晰的讲解)【转】
		转自:https://blog.csdn.net/seven_amber/article/details/70216216 该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神 ... 
- EasyDropDown – 很棒的下拉菜单,含精美主题
		EasyDropDown 是一个 jQuery 插件,你可以毫不费力地将简陋的 Select 元素设置为可定制风格的下拉菜单,用于表单或者一般的导航.和著名的下拉插件 Chosen 很像,但是具有自己 ... 
- 优秀工具推荐:两款很棒的 HTML5 游戏开发工具
		HTML5 众多强大特性让我们不需要多么高深技术就能创建好玩的网页游戏,同时证明了开放的 Web 技术能与任何其他在游戏开发中使用的技术竞争.正如标题所说,这篇文章推荐的几款很棒 HTML5 游戏开发 ... 
- 11个很棒的 jQuery 图表库
		如果你曾经使用过任何类型的数据,你应该知道阅读一排排数据的痛苦.通过所有这些数据弄清楚他们的意思是非常不容易的.可视化对于解决这个问题起到了重要的作用.可视化降低了数据阅读的难度,帮助决策者获得可操作 ... 
- 10个很棒的学习Android 开发的网站(转)
		看到江湖旅人 写的<10个很棒的学习iOS开发的网站 - 简书>,所以就忍不住写Android 啦,也希望对大家有帮助.我推荐的网站,都是我在学习Android 开发过程中发现的好网站,给 ... 
- 推荐几款很棒的 JavaScript 表单美化和验证插件
		表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让开发者花费了大量的时间和精力去处理,以期实现好用又漂亮的表单功能 ... 
- IOS学习资源收集--关于动画的代码学习资源总汇(很棒的动画效果哦)
		目录大纲: 1.很棒的iOS加载动画. github网址:https://github.com/NghiaTranUIT/FeSpinner 游老师的译文blog:http://www.cnblogs ... 
随机推荐
- hdu 3874 Necklace(bit树+事先对查询区间右端点排序)
			Mery has a beautiful necklace. The necklace is made up of N magic balls. Each ball has a beautiful v ... 
- 剑指offer-面试题2.实例Singleton模式
			题目:设计一个类,我们只能生成该类的一个实例 这道题显然是对设计模式的考察,很明显是单例模式.什么是单例模式呢,就是就像题目所说的只能生成一 个类的实例.那么我们不难考虑到下面几点: 1.不能new多 ... 
- AFNetWorking网络请求
			NetWorkAPIClient.h #import <Foundation/Foundation.h> #import "AFHTTPRequestOperationManag ... 
- Lua多重继承
			http://blog.csdn.net/ssihc0/article/details/7742421 代码收藏了,以后用的到 --多重继承 local function search(k,plist ... 
- C++ 採集音频流(PCM裸流)实现录音功能
			与上一篇的"C++ 播放音频流(PCM裸流)" 点击打开链接 相相应,本篇是关于用C++实现录音功能的.相同是直接建一个win32控制台程序然后将代码拷过去改个文件名称就能够用,也 ... 
- vlc-android对于通过Live555接收到音视频数据包后的处理分析
			通过ndk-gdb跟踪调试vlc-android来分析从连接到RTSP服务器并接收到音视频数据包后的处理过程. 首先,从前面的文章有分析过vlc-android的处理过程通过线程函数Run()(Src ... 
- 2014年1月24日 Oracle 连接查询与子查询
			1.乘积连接: 源表.源数据交叉链接,结果集数量为源数据之间的乘积 2.相等链接: 通过where关联几个数据源中的某一字段进行链接 3.自链接 自己链接自己 SSF A a1, A a2 ... 
- Thinking In Java读书笔记--对象导论
			Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ... 
- Dijkstra算法(迪杰斯塔拉算法)
			算法描述: Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法能得出最 ... 
- listview滚动到底部
			方法一: // msgListView是ListView控件 // adapter是ListView绑定的Adapter,如果不方便直接使用,也可以通过ListView的getAdapter()方法获 ... 
