java Swing 在JTable表格单元中加入button按钮,如何给单元格添加自定义按钮?

用纯java做软件开发,就会用到GUI图形界面,而GUI的核心技术就是SWING和AWT。本人在软件开发中常用的便是swing,最近开发做了很多新的供能,怕时间一久就忘了,于是抽空写在这里记录下来。

本篇文章讲的是怎么把单元格重新渲染为按钮,并且触发按钮的监听事件

在JTable中,有渲染器和编辑器两种。如果只是单纯的渲染样式,则调用setCellRenderer()函数,如果需要触发渲染后组件的事件,则还需要调用setCellEditor()函数,特别说明:渲染器只能改变样式,无法触发监听事件。话不多说,直接看代码。


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.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

public class Demo {

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		JTable table = new JTable();
		DefaultTableModel model = new DefaultTableModel();
		String[] columnIdentifiers = {"one", "two", "three"};//表头
		String[][] data = new String[5][3];
		for (int i = 0; i < 5; i++) {
			for (int j = 0; j < 3; j++) {
				if(j == 2) {
					continue;
				}
				data[i][j] = "asd";
			}
		}
		model.setDataVector(data, columnIdentifiers);
		table.setModel(model);
		
		table.getColumnModel().getColumn(2).setCellRenderer(new TableCellRendererButton());
		table.getColumnModel().getColumn(2).setCellEditor(new TableCellEditorButton());
		
		JScrollPane scrollPane = new JScrollPane(table);
		frame.add(scrollPane);
		frame.setBounds(100, 100, 300, 200);
		frame.setVisible(true);
	}
	
	
	
}

class TableCellRendererButton implements TableCellRenderer{
	
	

	@Override
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
			int row, int column) {
		JButton button = new JButton("按钮");
		return button;
	}
	
}

class TableCellEditorButton extends DefaultCellEditor{
	
	private JButton btn;
	public TableCellEditorButton() {
		super(new JTextField());
		//设置点击一次就激活,否则默认好像是点击2次激活。
		this.setClickCountToStart(1);
		btn = new JButton("按钮");
		btn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("按钮事件触发----");
				
			}
		});
		
	}
	@Override
	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
		
		return btn;
	}
	
	
}

运行后效果图如下:

 点击按钮时,会触发事件,在控制台提醒。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值