JTable高手,请务必要帮忙,不帮忙,不想混了!!! 我有这个这样一个JTable,有两个字段,那其中一个字段的值是变化的,是不同类型的,有字符串,颜色,Boolean类型。那我要根据这个类型来显示。如果字符串显示字符串,如果是颜色,就显示颜色,如果是Boolean,就显示打钩或者不打钩!!!请高手指点!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用绘制器就可以轻松搞定,就是用JTable的setCellRenderer()那个方法设定就可以了。自己实现一个绘制器TableCellRenderer 先定义一个超类,然后将几种类型从超类继承下来,这样在同一列中就保证是同一种类型了。写一个TableCellRenderer,根据不同的类,在paint中自已绘制,然后用JTable的setCellRenderer()方法设好自定义绘制器就行。给你一个绘制器参考:package com.ui.PointTable;import java.awt.Color;import java.awt.Component;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.SystemColor;import javax.swing.ImageIcon;import javax.swing.JPanel;import javax.swing.JTable;import javax.swing.table.TableCellRenderer;public class ImageCellRender extends JPanel implements TableCellRenderer { private static final long serialVersionUID = 54526; //是否被选取 private boolean selected; //标志 private boolean hasFocus; // 行号 private int rowNum; // 状态 private int cellState; // 图标 private ImageIcon image = null; //是否显示 private boolean hasValue; /** * 构造函数 * */ public ImageCellRender() { hasFocus=false; selected=false; rowNum = 0; cellState = PointTableModel.CELL_STATE_NORMAL; hasValue=false; } /** * 自定义绘制函数 */ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean focused, int row, int column) { rowNum = row; selected = isSelected; hasFocus=focused; cellState=PointTableModel.CELL_STATE_NORMAL; if(((PointTableModel) table.getModel()).isCellChanged(row, column)) cellState=PointTableModel.CELL_STATE_UPDATE; else if(((PointTableModel) table.getModel()).isCellDelete(row, column)) cellState=PointTableModel.CELL_STATE_DELETE; hasValue=false; if(value!=null){ hasValue=true; } return this; } /** * 绘制 */ public void paint(Graphics g) { super.paint(g); Graphics2D g2=(Graphics2D)g; if (hasFocus) g2.setColor(SystemColor.inactiveCaption); else { if (selected)// 如果选中 g2.setColor(new Color(180,201,228)); else { if (cellState == PointTableModel.CELL_STATE_DELETE)// 如果是删除状态 g2.setColor(new Color(255, 187, 187)); else if (cellState == PointTableModel.CELL_STATE_UPDATE)// 如果是删除状态 g2.setColor(new Color(187, 255, 187)); else { if ((rowNum + 1) % 2 == 0) g2.setColor(Color.WHITE); else g2.setColor(new Color(250, 250, 250)); } } } g2.fillRect(0, 0, getWidth(), getHeight()); //绘制图像 if(hasValue&&getPrevIcon()!=null) g2.drawImage(getPrevIcon().getImage(), getWidth() - 12, 2, this); } /** * 创建图标 * * @return */ private ImageIcon getPrevIcon(){ if(image==null){ try { image = new ImageIcon(getClass().getResource( "/res/Images/MiniView_Act.PNG")); } catch (Exception e) { System.out .println("创建图标时错误!\t代码:ImageCellRender.getPrevIcon()\t错误内容:" + e); } } return image; }} 使用JDBC连接数据库例子中的方法疑惑? 求学习方法~~三大框架都学一个月了还没有头绪~~~~自信被毁了,想退出 java初学者的求救 大虾们,字符串解析求助!! 关于即时消息的实现,希望高手给点建议 关于addWindowListener和addActionListener 连接远程数据库的问题?快来看,一定能学到东西 老问题,各位老大帮忙! 各位请问载java中能动态的定义变量吗??就是用程序控制定义变量的个数!! 关于今晚的结果,中国VS乌兹.......?给分 字符串转变量的问题 Teaching play在那里下
自己实现一个绘制器TableCellRenderer
写一个TableCellRenderer,根据不同的类,在paint中自已绘制,然后用JTable的setCellRenderer()方法设好自定义绘制器就行。给你一个绘制器参考:package com.ui.PointTable;import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.SystemColor;import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;public class ImageCellRender extends JPanel implements TableCellRenderer {
private static final long serialVersionUID = 54526; //是否被选取
private boolean selected; //标志
private boolean hasFocus;
// 行号
private int rowNum; // 状态
private int cellState;
// 图标
private ImageIcon image = null;
//是否显示
private boolean hasValue;
/**
* 构造函数
*
*/
public ImageCellRender() {
hasFocus=false;
selected=false;
rowNum = 0;
cellState = PointTableModel.CELL_STATE_NORMAL;
hasValue=false;
} /**
* 自定义绘制函数
*/
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean focused, int row, int column) { rowNum = row;
selected = isSelected;
hasFocus=focused; cellState=PointTableModel.CELL_STATE_NORMAL;
if(((PointTableModel) table.getModel()).isCellChanged(row,
column))
cellState=PointTableModel.CELL_STATE_UPDATE;
else if(((PointTableModel) table.getModel()).isCellDelete(row,
column))
cellState=PointTableModel.CELL_STATE_DELETE;
hasValue=false;
if(value!=null){
hasValue=true;
}
return this;
} /**
* 绘制
*/
public void paint(Graphics g) {
super.paint(g); Graphics2D g2=(Graphics2D)g;
if (hasFocus)
g2.setColor(SystemColor.inactiveCaption);
else {
if (selected)// 如果选中
g2.setColor(new Color(180,201,228));
else {
if (cellState == PointTableModel.CELL_STATE_DELETE)// 如果是删除状态
g2.setColor(new Color(255, 187, 187));
else if (cellState == PointTableModel.CELL_STATE_UPDATE)// 如果是删除状态
g2.setColor(new Color(187, 255, 187));
else {
if ((rowNum + 1) % 2 == 0)
g2.setColor(Color.WHITE);
else
g2.setColor(new Color(250, 250, 250));
}
}
}
g2.fillRect(0, 0, getWidth(), getHeight());
//绘制图像
if(hasValue&&getPrevIcon()!=null)
g2.drawImage(getPrevIcon().getImage(), getWidth() - 12, 2, this);
}
/**
* 创建图标
*
* @return
*/
private ImageIcon getPrevIcon(){
if(image==null){
try {
image = new ImageIcon(getClass().getResource(
"/res/Images/MiniView_Act.PNG"));
} catch (Exception e) {
System.out
.println("创建图标时错误!\t代码:ImageCellRender.getPrevIcon()\t错误内容:"
+ e);
}
}
return image;
}
}