欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-19 14:14:40
本文实例讲述了java swing中jtable渲染器与编辑器用法。分享给大家供大家参考,具体如下: jtable的内容、外观、事件响应在很大程度上是由渲染器与编辑器控制...

本文实例讲述了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 - www.jb51.net");
  //添加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方法刷新渲染器。注意,该步骤不必可少,因为渲染器中的业务代码很有可能改变单元格数值,从而导致渲染器必须进行刷新。

运行效果如下:

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

点击button1后的效果如下:

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

更多关于java相关内容感兴趣的读者可查看本站专题:《java数据结构与算法教程》、《java字符与字符串操作技巧总结》、《java操作dom节点技巧总结》、《java文件与目录操作技巧汇总》和《java缓存操作技巧汇总

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

上一篇:

下一篇: