JTable中嵌套JButton并加入JButton的事件处理

2024-02-25 18:32

本文主要是介绍JTable中嵌套JButton并加入JButton的事件处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用JTable还是挺麻烦的,特别是当需要嵌套其他的控件时,现在想在button上添加事件每次按钮一点击就会有获取到点击到的行和列,废话不多说,直接进入正题:

原理

要在JTable中嵌套其他的控件需要修改TableColumnModel的渲染器和编辑器,所以只要实现TableCellRenderer和TableCellEditor,然后通过表格获取TableColumnModel,再通过TableColumnModel设置渲染器和编辑器,分别是这两个方法,一个是setCellRenderer()方法,一个是setCellEditor()方法。

代码

TableCellRenderer的实现类MyButtonRender.java:

package test6;import java.awt.Component;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;public class MyButtonRender implements TableCellRenderer{private JButton button;public MyButtonRender() {button = new JButton("确认");}@Overridepublic Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) {return button;}}

上面的没有什么需要介绍的,重点是下面的编辑器:MyButtonEditor.java:

package test6;import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultCellEditor;
import javax.swing.JTable;
import javax.swing.JTextField;public class MyButtonEditor extends DefaultCellEditor{private MyButton button;private MyEvent event;public MyButtonEditor() {super(new JTextField());button = new MyButton("确认");button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//这里调用自定义的事件处理方法event.invoke(e);}});}public MyButtonEditor(MyEvent e) {this();this.event = e;}/*重写编辑器方法,返回一个按钮给JTable*/@Overridepublic Component getTableCellEditorComponent(JTable table, Object value,boolean isSelected, int row, int column) {
//      setClickCountToStart(1);
//将这个被点击的按钮所在的行和列放进button里面button.setRow(row);button.setColumn(column);return button;}}

在那里面的,我引用了我自定义的MyButton,从JButton继承而来的,里面我方了两个属性,分别记录了每一个按钮的行和列。
MyButton.java:

package test6;import javax.swing.JButton;public class MyButton extends JButton{private int row;private int column;public int getRow() {return row;}public void setRow(int row) {this.row = row;}public int getColumn() {return column;}public void setColumn(int column) {this.column = column;}public MyButton() {}public MyButton(String name) {super(name);}}

在MyButtonEditor中还有一个我自己定义的MyEvent,里面只定义了一个方法,public abstract void invoke(ActionEvent e);这个方法是要在按钮的事件处理方法被调用,接下来是主函数:
Main.java;

package test6;import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JTable;public class Main {public static void main(String[] args) {JFrame frame = new JFrame("test");JTable table = new JTable(5, 4);//实例化MyEvent,这里的invoke写你自己处理按钮被点击的逻辑MyEvent e = new MyEvent() {@Overridepublic void invoke(ActionEvent e) {MyButton button = (MyButton)e.getSource();//打印被点击的行和列System.out.println("row:" + button.getRow() + "column :" + button.getColumn());}};//设置表格的渲染器table.getColumnModel().getColumn(2).setCellRenderer(new MyButtonRender());MyButtonEditor editor = new MyButtonEditor(e);//设置表格的编辑器table.getColumnModel().getColumn(2).setCellEditor(editor);frame.getContentPane().add(table);frame.setSize(400, 300);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}
}

这里写图片描述

点击之后的运行结果:

row:0column :2
row:0column :2
row:1column :2
row:1column :2
row:2column :2
row:2column :2
row:3column :2
row:3column :2
row:4column :2
row:4column :2
row:4column :2

这篇关于JTable中嵌套JButton并加入JButton的事件处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/746329

相关文章

hdu1254(嵌套bfs,两次bfs)

/*第一次做这种题感觉很有压力,思路还是有点混乱,总是wa,改了好多次才ac的思路:把箱子的移动当做第一层bfs,队列节点要用到当前箱子坐标(x,y),走的次数step,当前人的weizhi(man_x,man_y),要判断人能否将箱子推到某点时要嵌套第二层bfs(人的移动);代码如下:

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机

自我提升社团成立啦,欢迎各位同学加入~

欢迎加入 大家好,我是马丁,我们的自我提升社团成立啦,欢迎有新的朋友加入!! 我们的社团主要目标是帮助每个人实现自我成长、自我提升,不论他是什么年龄、什么经验、什么专业,只要有一个好学和想进步的心,都可以加入。 为了提升帮助每个人实现自我成长,目前社团选择的是做一个智能客服系统,我们希望通过搭建一个企业级的智能客服系统来帮助每个人实现自我成长。后续,还会开发更多系统~ 目前群里大多是Jav

多个,多层嵌套module,打aar包

参考https://blog.51cto.com/4259297/1699714 1.在要打包的module中下添加fat-aar.gradle文件。(该文件只能在项目个gradle是2.3.3是才可食用) 2.把项目的gradle修改为2.3.3,但是不打包的gradle依然是以前的。 3.由于打包的的gradle和不打包的是不一样的,所以需要在修改gradle的文件中的添加判断标志

Android studio jar包多层嵌套,Add library '__local_aars__:...@jar' to classpath问题

在添加jar包,早app下的build.gradle中的 implementation files('libs/jar包的名字.jar') 修改为 api files('libs/jar包的名字.jar') implementation 单层引用,只引用当前jar包层, api 多层引用,应用当前jar包层,已经jar包引用的jar包层

Android触摸事件处理机制之requestDisallowInterceptTouchEvent

一、触摸事件传递的规则 当手指触摸到屏幕时,系统就会调用相应的View的onTouchEvent,并传入一系列的action。当有多个层级的View时,在父层级允许的情况下,这个action会一直向下传递直到遇到最深层的View。所以touch事件最先调用的是最底层View的onTouchEvent,如果View的onTouchEvent接收到某个touchaction并做了相应处理,最后有两种

vue el-dialog嵌套解决无法点击问题

产生原因: 当你在 el-dialog 上嵌套另一个 el-dialog 窗口时,可能会遇到内部对话框无法点击的问题。这通常是由于嵌套对话框的遮罩层(overlay)或其他样式问题造成的。 解决方案: 如果你的 el-dialog 组件支持 append-to-body 属性,你可以将对话框附加到 body 元素上,以避免 z-index 问题。 <template><el-dialo

14,子查询语句嵌套

1.1 查询研发部门的所有员工信息 #步骤1: 查询研发部门的 did SELECT did FROM t_department WHERE dname = '研发部'; #步骤2: 嵌套子查询,查询员工信息 SELECT * FROM t_employee WHERE did = (SELECT did FROM t_department WHERE dname = '研发部');

java AWT事件处理

事件处理的过程中,主要涉及3类对象: Event Source(事件源):事件发生的声所,如按钮,窗口,菜单等组件。 Event(事件):事件封装了GUI组件上发生的特定事情(通常是一次用打操作)。 Event Listener(事件监听器):负责监听事件源所发生的事件,并对各种事件做出响应处理。 实现AWT事件处理机制的步骤如下: 1.实现事件监听器类,该监听器类是一个特殊的java类

NYOJ 16 矩形嵌套

OJ题目 : http://acm.nyist.net/JudgeOnline/problem.php?pid=16 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除