用纯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;
}
}
运行后效果图如下:
文章来源:https://www.toymoban.com/news/detail-513341.html
点击按钮时,会触发事件,在控制台提醒。文章来源地址https://www.toymoban.com/news/detail-513341.html
到了这里,关于java Swing 在JTable表格单元中加入button按钮,如何给单元格添加自定义按钮?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!