Jtable显示图片的例子:/** @version 1.00 2001-07-21 @author Cay Horstmann */import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*;/** This program demonstrates cell rendering and editing in a table. */ public class TableCellRenderTest { public static void main(String[] args) { JFrame frame = new TableCellRenderFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.show(); } }/** This frame contains a table of planet data. */ class TableCellRenderFrame extends JFrame { public TableCellRenderFrame() { setTitle("TableCellRenderTest"); setSize(WIDTH, HEIGHT); TableModel model = new PlanetTableModel(); JTable table = new JTable(model); // set up renderers and editors table.setDefaultRenderer(Color.class, new ColorTableCellRenderer()); table.setDefaultEditor(Color.class, new ColorTableCellEditor()); JComboBox moonCombo = new JComboBox(); for (int i = 0; i <= 20; i++) moonCombo.addItem(new Integer(i)); TableColumnModel columnModel = table.getColumnModel(); TableColumn moonColumn = columnModel.getColumn(PlanetTableModel.MOON_COLUMN); moonColumn.setCellEditor(new DefaultCellEditor(moonCombo)); // show table table.setRowHeight(100); getContentPane().add(new JScrollPane(table), BorderLayout.CENTER); } private static final int WIDTH = 600; private static final int HEIGHT = 400; }/** The planet table model specifies the values, rendering and editing properties for the planet data. */ class PlanetTableModel extends AbstractTableModel { public String getColumnName(int c) { return columnNames[c]; } public Class getColumnClass(int c) { return cells[0][c].getClass(); } public int getColumnCount() { return cells[0].length; } public int getRowCount() { return cells.length; } public Object getValueAt(int r, int c) { return cells[r][c]; } public void setValueAt(Object obj, int r, int c) { cells[r][c] = obj; } public boolean isCellEditable(int r, int c) { return c == NAME_COLUMN || c == MOON_COLUMN || c == GASEOUS_COLUMN || c == COLOR_COLUMN; } public static final int NAME_COLUMN = 0; public static final int MOON_COLUMN = 2; public static final int GASEOUS_COLUMN = 3; public static final int COLOR_COLUMN = 4; private Object[][] cells = { { "Mercury", new Double(2440), new Integer(0), Boolean.FALSE, Color.yellow, new ImageIcon("Mercury.gif") }, { "Venus", new Double(6052), new Integer(0), Boolean.FALSE, Color.yellow, new ImageIcon("Venus.gif") }, { "Earth", new Double(6378), new Integer(1), Boolean.FALSE, Color.blue, new ImageIcon("Earth.gif") }, { "Mars", new Double(3397), new Integer(2), Boolean.FALSE, Color.red, new ImageIcon("Mars.gif") }, { "Jupiter", new Double(71492), new Integer(16), Boolean.TRUE, Color.orange, new ImageIcon("Jupiter.gif") }, { "Saturn", new Double(60268), new Integer(18), Boolean.TRUE, Color.orange, new ImageIcon("Saturn.gif") }, { "Uranus", new Double(25559), new Integer(17), Boolean.TRUE, Color.blue, new ImageIcon("Uranus.gif") }, { "Neptune", new Double(24766), new Integer(8), Boolean.TRUE, Color.blue, new ImageIcon("Neptune.gif") }, { "Pluto", new Double(1137), new Integer(1), Boolean.FALSE, Color.black, new ImageIcon("Pluto.gif") } }; private String[] columnNames = { "Planet", "Radius", "Moons", "Gaseous", "Color", "Image" }; }/** This renderer renders a color value as a panel with the given color. */ class ColorTableCellRenderer implements TableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { panel.setBackground((Color)value); return panel; } // the following panel is returned for all cells, with // the background color set to the Color value of the cell private JPanel panel = new JPanel(); }/** This editor pops up a color dialog to edit a cell value */ class ColorTableCellEditor extends AbstractCellEditor implements TableCellEditor { ColorTableCellEditor() { panel = new JPanel(); // prepare color dialog colorChooser = new JColorChooser(); colorDialog = JColorChooser.createDialog(null, "Planet Color", false, colorChooser, new ActionListener() // OK button listener { public void actionPerformed(ActionEvent event) { stopCellEditing(); } }, new ActionListener() // Cancel button listener { public void actionPerformed(ActionEvent event) { cancelCellEditing(); } }); colorDialog.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent event) { cancelCellEditing(); } }); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { // this is where we get the current Color value. We // store it in the dialog in case the user starts editing colorChooser.setColor((Color)value); return panel; } public boolean shouldSelectCell(EventObject anEvent) { // start editing colorDialog.setVisible(true); // tell caller it is ok to select this cell return true; } public void cancelCellEditing() { // editing is canceled--hide dialog colorDialog.setVisible(false); super.cancelCellEditing(); } public boolean stopCellEditing() { // editing is complete--hide dialog colorDialog.setVisible(false); super.stopCellEditing(); // tell caller is is ok to use color value return true; } public Object getCellEditorValue() { return colorChooser.getColor(); } private Color color; private JColorChooser colorChooser; private JDialog colorDialog; private JPanel panel; } 自己研究研究,不复杂,<<CoreJava>> 高级卷 第六章的原例
@version 1.00 2001-07-21
@author Cay Horstmann
*/import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;/**
This program demonstrates cell rendering and editing
in a table.
*/
public class TableCellRenderTest
{
public static void main(String[] args)
{
JFrame frame = new TableCellRenderFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}/**
This frame contains a table of planet data.
*/
class TableCellRenderFrame extends JFrame
{
public TableCellRenderFrame()
{
setTitle("TableCellRenderTest");
setSize(WIDTH, HEIGHT); TableModel model = new PlanetTableModel();
JTable table = new JTable(model); // set up renderers and editors table.setDefaultRenderer(Color.class,
new ColorTableCellRenderer());
table.setDefaultEditor(Color.class,
new ColorTableCellEditor()); JComboBox moonCombo = new JComboBox();
for (int i = 0; i <= 20; i++)
moonCombo.addItem(new Integer(i));
TableColumnModel columnModel = table.getColumnModel();
TableColumn moonColumn
= columnModel.getColumn(PlanetTableModel.MOON_COLUMN);
moonColumn.setCellEditor(new DefaultCellEditor(moonCombo)); // show table table.setRowHeight(100);
getContentPane().add(new JScrollPane(table),
BorderLayout.CENTER);
} private static final int WIDTH = 600;
private static final int HEIGHT = 400;
}/**
The planet table model specifies the values, rendering
and editing properties for the planet data.
*/
class PlanetTableModel extends AbstractTableModel
{
public String getColumnName(int c)
{
return columnNames[c];
} public Class getColumnClass(int c)
{
return cells[0][c].getClass();
} public int getColumnCount()
{
return cells[0].length;
} public int getRowCount()
{
return cells.length;
} public Object getValueAt(int r, int c)
{
return cells[r][c];
} public void setValueAt(Object obj, int r, int c)
{
cells[r][c] = obj;
} public boolean isCellEditable(int r, int c)
{
return c == NAME_COLUMN
|| c == MOON_COLUMN
|| c == GASEOUS_COLUMN
|| c == COLOR_COLUMN;
} public static final int NAME_COLUMN = 0;
public static final int MOON_COLUMN = 2;
public static final int GASEOUS_COLUMN = 3;
public static final int COLOR_COLUMN = 4; private Object[][] cells =
{
{
"Mercury", new Double(2440), new Integer(0),
Boolean.FALSE, Color.yellow,
new ImageIcon("Mercury.gif")
},
{
"Venus", new Double(6052), new Integer(0),
Boolean.FALSE, Color.yellow,
new ImageIcon("Venus.gif")
},
{
"Earth", new Double(6378), new Integer(1),
Boolean.FALSE, Color.blue,
new ImageIcon("Earth.gif")
},
{
"Mars", new Double(3397), new Integer(2),
Boolean.FALSE, Color.red,
new ImageIcon("Mars.gif")
},
{
"Jupiter", new Double(71492), new Integer(16),
Boolean.TRUE, Color.orange,
new ImageIcon("Jupiter.gif")
},
{
"Saturn", new Double(60268), new Integer(18),
Boolean.TRUE, Color.orange,
new ImageIcon("Saturn.gif")
},
{
"Uranus", new Double(25559), new Integer(17),
Boolean.TRUE, Color.blue,
new ImageIcon("Uranus.gif")
},
{
"Neptune", new Double(24766), new Integer(8),
Boolean.TRUE, Color.blue,
new ImageIcon("Neptune.gif")
},
{
"Pluto", new Double(1137), new Integer(1),
Boolean.FALSE, Color.black,
new ImageIcon("Pluto.gif")
}
}; private String[] columnNames =
{
"Planet", "Radius", "Moons", "Gaseous", "Color", "Image"
};
}/**
This renderer renders a color value as a panel with the
given color.
*/
class ColorTableCellRenderer implements TableCellRenderer
{
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column)
{
panel.setBackground((Color)value);
return panel;
} // the following panel is returned for all cells, with
// the background color set to the Color value of the cell private JPanel panel = new JPanel();
}/**
This editor pops up a color dialog to edit a cell value
*/
class ColorTableCellEditor extends AbstractCellEditor
implements TableCellEditor
{
ColorTableCellEditor()
{
panel = new JPanel();
// prepare color dialog colorChooser = new JColorChooser();
colorDialog = JColorChooser.createDialog(null,
"Planet Color", false, colorChooser,
new
ActionListener() // OK button listener
{
public void actionPerformed(ActionEvent event)
{
stopCellEditing();
}
},
new
ActionListener() // Cancel button listener
{
public void actionPerformed(ActionEvent event)
{
cancelCellEditing();
}
});
colorDialog.addWindowListener(new
WindowAdapter()
{
public void windowClosing(WindowEvent event)
{
cancelCellEditing();
}
});
} public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column)
{
// this is where we get the current Color value. We
// store it in the dialog in case the user starts editing
colorChooser.setColor((Color)value);
return panel;
} public boolean shouldSelectCell(EventObject anEvent)
{
// start editing
colorDialog.setVisible(true); // tell caller it is ok to select this cell
return true;
} public void cancelCellEditing()
{
// editing is canceled--hide dialog
colorDialog.setVisible(false);
super.cancelCellEditing();
} public boolean stopCellEditing()
{
// editing is complete--hide dialog
colorDialog.setVisible(false);
super.stopCellEditing(); // tell caller is is ok to use color value
return true;
} public Object getCellEditorValue()
{
return colorChooser.getColor();
} private Color color;
private JColorChooser colorChooser;
private JDialog colorDialog;
private JPanel panel;
}
自己研究研究,不复杂,<<CoreJava>> 高级卷 第六章的原例
这些都包括的,在JFC里。
主要是JTree的各个节点如何用不同的颜色及图片?
知道的请告知一下。谢谢!
所以extends DefualtTreeCellRenderer,重写接口,构造node时传入Label,取参value如下:(valueDefaultMutableNode)value.getUserObject instanceof Label
把需要用到的图片(valueDefaultMutableNode)value.getUserObject.getIcon()
后再setLeafIconsuper.接口 传参数还是一样,不过leaf为true,value就传(valueDefaultMutableNode)value.getUserObject.getText()麻烦一个字!!希望对有需要的朋友有用,这样实现不用考虑UI细节方面的问题!感谢FedoraCoreIII(元太) 的源码!