[请教]怎么在JTable的一个单元格中添加一个带有图片和文字的JLabel 请教下各位,怎么在JTable的一个单元格中添加一个带有图片和文字的JLabel呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自己实现一个tablecellrenderer吧 各位高手,帮我看下以下的代码,疑问部分以①②③标注①第一列为什么显示“D:\\pause.png”?②第二列为什么显示"D:\\pause.png"的图片和字符串dddd?③第二列为什么显示"D:\\pause.png"的图片?package prj;import java.awt.Color;import java.awt.Component;import java.awt.Dimension;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.border.LineBorder;import javax.swing.table.AbstractTableModel;import javax.swing.table.DefaultTableCellRenderer;import javax.swing.table.TableColumnModel;/** * 有图片的表格 * @author Administrator * */public class JTableDemo{ JTable table = new JTable(); public JTableDemo() { JFrame frame = new JFrame("有图片文字的表格"); frame.setLayout(null); MyTableModel dm = new MyTableModel(); JTable table = new JTable(); table.setModel(dm); TableColumnModel columnModel = table.getColumnModel(); for (int i = 0; i < columnModel.getColumnCount(); i++) { columnModel.getColumn(1).setCellRenderer(new ImageRenderer()); // 为每一列column指定Renderer } table.setDefaultRenderer(Icon.class, new ImageRenderer()); JScrollPane src = new JScrollPane(table); src.setBounds(0, 0, 400, 200); frame.setSize(new Dimension(400, 200)); frame.add(src); frame.setVisible(true); } public static void main(String args[]) { new JTableDemo(); }}class MyTableModel extends AbstractTableModel { private String[] columnNames = { "First Name", "Favorite Color", }; private Object[][] data = { { "Mary", new ImageIcon("D:\\tbl.png") }, { "Alison", new ImageIcon("D:\\pause.png") },① { new ImageIcon("D:\\pause.png") , "Alison" }, { "Kathy", new ImageIcon("D:\\play.png") }, { "Sharon", new ImageIcon("D:\\tbl.png") }, { "Philip", new ImageIcon("D:\\pause.png") }, ② { "Philip1" , "dddd"} ,③ { "Philip2", new JLabel(new ImageIcon("D:\\tbl.png")) } }; public int getColumnCount() { return columnNames.length; } public int getRowCount() { return data.length; } public String getColumnName(int col) { return columnNames[col]; } public Object getValueAt(int row, int col) { return data[row][col]; } public Class getColumnClass(int c) { if (c == 1) { System.out.println("---" + getValueAt(0, c).getClass()); } return c == 1 ? Icon.class : Object.class; } public boolean isCellEditable(int row, int col) { if (col < 1) { return false; } else { return true; } } public void setValueAt(Object value, int row, int col) { data[row][col] = value; fireTableCellUpdated(row, col); }}class ImageRenderer extends DefaultTableCellRenderer{ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (value instanceof Icon) { this.setIcon((Icon) value); if (isSelected) setBorder(new LineBorder(Color.red)); } else if (value instanceof String) setText((String) value); else setText(""); return this; }} 是不是与JDK有关呀,我用的1.6的。4楼的同学用的是什么版本呀? java socket 通信 帮帮忙,关于JList的 从一开始输出到一百 把applet打包成jar了的,里面有图片,偶尔会出现读取出错,是什么问题呢? jsp看来赶上asp.net了!!! 编译一个hello world都一天,兄弟帮一下喽 求java网络及多线程编程的电子书 有没有办法去掉jre1.4下向JTextField输入中文时弹出来的那个恶心的输入窗口? 菜鸟问题-如何从一个frame调用一个Panel? 在InternalFrame中画图的问题~~~~急(在线等待) java编译错误,请高手帮忙看看 IO问题,头疼疼
①第一列为什么显示“D:\\pause.png”?
②第二列为什么显示"D:\\pause.png"的图片和字符串dddd?
③第二列为什么显示"D:\\pause.png"的图片?package prj;import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.LineBorder;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumnModel;/**
* 有图片的表格
* @author Administrator
*
*/
public class JTableDemo
{
JTable table = new JTable(); public JTableDemo()
{
JFrame frame = new JFrame("有图片文字的表格");
frame.setLayout(null); MyTableModel dm = new MyTableModel(); JTable table = new JTable();
table.setModel(dm);
TableColumnModel columnModel = table.getColumnModel();
for (int i = 0; i < columnModel.getColumnCount(); i++)
{
columnModel.getColumn(1).setCellRenderer(new ImageRenderer()); // 为每一列column指定Renderer
}
table.setDefaultRenderer(Icon.class, new ImageRenderer()); JScrollPane src = new JScrollPane(table);
src.setBounds(0, 0, 400, 200);
frame.setSize(new Dimension(400, 200));
frame.add(src);
frame.setVisible(true);
} public static void main(String args[])
{
new JTableDemo();
}
}class MyTableModel extends AbstractTableModel
{
private String[] columnNames = { "First Name", "Favorite Color", }; private Object[][] data = {
{ "Mary", new ImageIcon("D:\\tbl.png") },
{ "Alison", new ImageIcon("D:\\pause.png") },
① { new ImageIcon("D:\\pause.png") , "Alison" },
{ "Kathy", new ImageIcon("D:\\play.png") },
{ "Sharon", new ImageIcon("D:\\tbl.png") },
{ "Philip", new ImageIcon("D:\\pause.png") },
② { "Philip1" , "dddd"} ,
③ { "Philip2", new JLabel(new ImageIcon("D:\\tbl.png")) }
}; public int getColumnCount()
{
return columnNames.length;
} public int getRowCount()
{
return data.length;
} public String getColumnName(int col)
{
return columnNames[col];
} public Object getValueAt(int row, int col)
{
return data[row][col];
} public Class getColumnClass(int c)
{
if (c == 1)
{
System.out.println("---" + getValueAt(0, c).getClass());
}
return c == 1 ? Icon.class : Object.class;
} public boolean isCellEditable(int row, int col)
{
if (col < 1)
{
return false;
}
else
{
return true;
}
} public void setValueAt(Object value, int row, int col)
{
data[row][col] = value;
fireTableCellUpdated(row, col);
}
}class ImageRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
row, column);
if (value instanceof Icon)
{
this.setIcon((Icon) value); if (isSelected)
setBorder(new LineBorder(Color.red));
}
else if (value instanceof String)
setText((String) value);
else
setText(""); return this;
}
}