TableCellRenderer TableCellEditor(三)
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.border.*;
import javax.swing.table.*;
Double[] values = new Double[]{new Double(0.1), new Double(0.3), new Double(0.8)};
// model
class TableModel extends AbstractTableModel{
public int getColumnCount() {
return 2;
}
public int getRowCount() {
return values.length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return values[rowIndex];
}
public void setValueAt(Object value, int rowIndex, int columnIndex) {
values[rowIndex] = (Double)value;
this.fireTableCellUpdated(rowIndex, 0);
}
public String getColumnName(int columnIndex) {
if(columnIndex == 0){
return "plain";
}else{
return "beauty";
}
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
if(columnIndex == 0){
return false;
}else{
return true;
}
}
}
// cell editor
class Editor extends AbstractCellEditor implements TableCellEditor, ActionListener {
JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 100, 50);
TableCellRenderer renderer;
JButton actionButton;
Object value;
JTable table;
int row;
int column;
JPanel panel = new JPanel(new BorderLayout());
public Editor(TableCellRenderer renderer){
this.renderer = renderer;
actionButton = new JButton(new ImageIcon(TableTest3.class.getResource("dotdotdot.gif")));
actionButton.addActionListener(this);
actionButton.setFocusable(false);
actionButton.setFocusPainted(false);
actionButton.setMargin(new Insets(0, 0, 0, 0));
panel.add(actionButton, BorderLayout.EAST);
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column){
this.value = value;
this.table = table;
this.row = row;
this.column = column;
panel.add(renderer.getTableCellRendererComponent(table, value, true, isSelected, row, column));
return panel;
}
public Object getCellEditorValue(){
return value;
}
int intValue = (int)(((Number)value).doubleValue() * 100);
slider.setValue(intValue);
int result = JOptionPane.showOptionDialog(TableTest3.this,
slider, "change value",
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, null, null);
if(result==JOptionPane.OK_OPTION) {
this.value = new Double(slider.getValue()/100.0);
this.fireEditingStopped();
}else{
this.fireEditingCanceled();
}
}
// cell render
class Renderer extends JComponent implements TableCellRenderer{
Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
Border focusBorder = UIManager.getBorder("Table.focusCellHighlightBorder");
private boolean hasFocus;
private Double value;
public void paintComponent(Graphics g) {
super.paintComponent(g);
if(hasFocus){
this.setBorder(focusBorder);
}else{
this.setBorder(noFocusBorder);
}
Dimension size = this.getSize();
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
GradientPaint gp = new GradientPaint(0, 0, Color.BLUE, size.width, 0, Color.YELLOW, true);
g2.setPaint(gp);
g2.fillRect(0, 0, size.width, size.height);
g2.setColor(Color.GREEN);
double r = (size.height - 8) / 2.0;
int centerX = (int)(size.width * value.doubleValue());
int centerY = (int)r;
g2.fill(new Ellipse2D.Double(centerX-r, centerY-r+4, r * 2, r * 2));
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
this.hasFocus = hasFocus;
this.value = (Double)value;
this.setToolTipText(value + "");
return this;
}
}
public TableTest3(){
super("renderer used by editor");
table = new JTable(new TableModel());
TableColumn tableColumn = table.getColumnModel().getColumn(1);
tableColumn.setCellRenderer(new Renderer());
tableColumn.setCellEditor(new Editor(new Renderer()));
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
this.setSize(500, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
new TableTest3().show();
转载于:https://www.cnblogs.com/gwq369/p/5363206.html
TableCellRenderer TableCellEditor(三)相关推荐
- 用Java写一个PC端的WIFI-ADB管理软件
废话 一直在用android studio做android开发,偶然一次机会接触到了wifi adb,试了好几个支持android studio的插件,各有优缺点,有一个本来用着好好的,突然就用不了, ...
- TableCellRenderer和TableCellEditor(一)
转载:http://blog.sina.com.cn/s/blog_661a3fce0100mske.html 最近不少朋友问我TableCellRenderer和TableCellEditor的用 ...
- Java程序设计——Swing UI 高级组件(三)
目录 Timer:计时器 JFileChooser:文件选择器 JColorChooser:颜色选择器 BorderFactory:边框 JTable:表格 JOptionPane:标准对话框 JTr ...
- 伍六七带你学算法 进阶篇-三数之和
三数之和 难度-中等 题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意 ...
- 远程控制virtual box虚拟机系统的三种方式
远程控制virtual box虚拟机系统的三种方式[阅读时间:5分钟] 1.使用现有的远程控制软件 2.使用SSH连接 3.使用远程桌面控制虚拟机系统 对于把虚拟机安装在寝室笔记本的人来说,能够远程控 ...
- 2022-2028年中国三轴陀螺仪行业市场深度分析及投资前景分析报告
[报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了三轴陀螺仪行业相关概述.中国三轴陀螺仪行业运行环境.分析了中国三轴陀 ...
- TCP三次握手和四次挥手的解释
基础知识 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 它们的含义是: SYN ...
- python实现简单的用户密码登录控制(输入三次就锁定用户)
问题描述 我们经常在登录一些网站的时候,发现我们如果连续的输错好几次密码,我们的帐号就被锁定起来了,那这个过程是如何实现的呢?本程序主要就是解决以下3件事情 1.输入用户名密码 2.认证成功并显示欢迎 ...
- 难忘的一天——装操作系统(三)
谈我此次装机的曲折过程,本来我是打算win7,win8.1,win10这三个系统都装个遍,这样多装几次差不多就会了.刚开始装win7.我就卡壳了. 开始装了,进入了老毛桃的界面,浏览文件选中自己优盘里 ...
最新文章
- html word-wrap,CSS3 Word-wrap
- UseCase事件描述叙事流规范
- layui中onchange失效以及form动态渲染失效的问题
- 入门启发:音视频的简单理解
- 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
- 2021牛客暑期多校训练营1 J-Journey among Railway Stations(线段树+思维转化)
- Map 3D中通过程序删除图层及数据源
- java知识总结-13
- webpack 分离css html,【已解决】ReactJS中Webpack打包时分离css
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_5、SpringBoot2.x的依赖默认Maven版本...
- python的类变量和成员变量用法_python中类变量和成员变量、局部变量总结
- Social Network Visualizer社交网络可视化,导入txt数据集
- 浙江新华书店的数字化新尝试
- Chromium OS?本土化气息的的Flint OS
- HTML语言中表格怎么弄,html语言中table表格内怎么换行
- 对称加密算法 Blowfish 和 Twofish
- 人类的智能是如何产生的
- 中国银行基金代销一览表
- Qt之Q_OBJECT
- 这就是iPhone 6的屏幕?