Java Swing中JTable渲染器与编辑器用法示例

2025-05-29 0 26

本文实例讲述了java swing中jtable渲染器编辑器用法。分享给大家供大家参考,具体如下:

jtable的内容、外观、事件响应在很大程度上是由渲染器编辑器控制的。具体说来,渲染器负责单元格的外观比如前景色、背景色,以及单元格提示;编辑器负责单元格的内容和事件响应。编辑器默认为文本框形式,也可以使用下拉菜单、按钮、单选按钮等形式。下面通过一个demo程序来说明渲染器编辑器的基本用法。

jbuttontableexample.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36
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 - www.zzvips.com");

//添加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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23
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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35
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方法刷新渲染器。注意,该步骤不必可少,因为渲染器中的业务代码很有可能改变单元格数值,从而导致渲染器必须进行刷新。

运行效果如下:

Java Swing中JTable渲染器与编辑器用法示例

点击button1后的效果如下:

Java Swing中JTable渲染器与编辑器用法示例

希望本文所述对大家java程序设计有所帮助。

原文链接:http://www.cnblogs.com/pzy4447/p/5155051.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java Swing中JTable渲染器与编辑器用法示例 https://www.kuaiidc.com/114074.html

相关文章

发表评论
暂无评论