时间:2021-05-19
本文实例讲述了Java Swing中JTable渲染器与编辑器用法。分享给大家供大家参考,具体如下:
JTable的内容、外观、事件响应在很大程度上是由渲染器与编辑器控制的。具体说来,渲染器负责单元格的外观比如前景色、背景色,以及单元格提示;编辑器负责单元格的内容和事件响应。编辑器默认为文本框形式,也可以使用下拉菜单、按钮、单选按钮等形式。下面通过一个demo程序来说明渲染器与编辑器的基本用法。
JButtonTableExample.java
package awtDemo;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;@SuppressWarnings("serial")public class JButtonTableExample extends JFrame { public JButtonTableExample() { super("JButtonTable Example - "); //添加TableModel以及表格数据 DefaultTableModel dm = new DefaultTableModel(); dm.setDataVector(new Object[][] { { "button 1", "foo" }, { "button 2", "bar" } }, new Object[] { "Button", "String" }); JTable table = new JTable(dm); //添加渲染器 table.getColumn("Button").setCellRenderer(new ButtonRenderer()); //添加编辑器 table.getColumn("Button").setCellEditor( new ButtonEditor(new JCheckBox())); //GUI设置 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); } }); }}以上是主程序,构造了GUI、table以及model。并设置了table的渲染器和编辑器。
ButtonRenderer.java
package awtDemo;import java.awt.Color;import javax.swing.JButton;import javax.swing.JComponent;import javax.swing.JTable;import javax.swing.table.TableCellRenderer;@SuppressWarnings("serial")class ButtonRenderer extends JButton implements TableCellRenderer { public JComponent getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { //value 源于editor String text = (value == null) ? "" : value.toString(); //按钮文字 setText(text); //单元格提示 setToolTipText(text); //背景色 setBackground(Color.BLACK); //前景色 setForeground(Color.green); return this; }}定制的渲染器必须实现TableCellRenderer及getTableCellRendererComponent方法。在该方法中,可以指定渲染器的文字、单元格提示、颜色、字体等。注意,此处的文字仅为显示的内容,不是单元格的实际数据。
ButtonEditor.java
package awtDemo;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.JComponent;import javax.swing.JOptionPane;import javax.swing.JTable;@SuppressWarnings("serial")class ButtonEditor extends DefaultCellEditor { protected JButton button;//represent the cellEditorComponent private String cellValue;//保存cellEditorValue public ButtonEditor(JCheckBox checkBox) { super(checkBox); button = new JButton(); button.setOpaque(true); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(button, cellValue + ": Ouch!"); //刷新渲染器 fireEditingStopped(); } }); } public JComponent getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { //value 源于单元格数值 cellValue = (value == null) ? "" : value.toString(); return button; } public Object getCellEditorValue() { return new String(cellValue); }}本编辑器实现了一个按钮,相应的业务代码均位于其事件响应函数中。定制的渲染器必须继承DefaultCellEditor,并重载其getTableCellEditorComponent方法。getTableCellEditorComponent的参数提供了表格对象、单元格数值、单元格选中标志以及单元格的坐标,并返回代表该单元格的渲染器的JComponent组件。在该方法中,我们将单元格数值保存为成员变量cellValue,并返回一个按钮。getCellEditorValue方法用于返回单元格数值,需要我们显示地指定。在按钮的事件响应函数中,本demo通过弹出对话框输出了相应的单元格数值。然后,调用了fireEditingStopped方法刷新渲染器。注意,该步骤不必可少,因为渲染器中的业务代码很有可能改变单元格数值,从而导致渲染器必须进行刷新。
运行效果如下:
点击button1后的效果如下:
更多关于java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
表格是最常用的数据统计形式之一,在swing中由JTable类实现表格。接下来,我们看看怎么利用JTable创建表格。在JTable类中除了默认的构造方法外,还
vray渲染灯光不亮的原因及解决方法: 1、vray灯光,只能用vray渲染器渲染,如果用其他渲染器就会不起作用。 2、请确保vray灯光的开关不是关闭状态
视频渲染即是指视频混合渲染器,VideoRenderer(VR)是接收RGB/YUV裸数据,然后在显示器上显示的Filter。主要作用是能够保证使用者在编辑时更
视频渲染即是指视频混合渲染器,VideoRenderer(VR)是接收RGB/YUV裸数据,然后在显示器上显示的Filter。主要作用是能够保证使用者在编辑时更
视频渲染即是指视频混合渲染器,VideoRenderer(VR)是接收RGB/YUV裸数据,然后在显示器上显示的Filter。主要作用是能够保证使用者在编辑时更