[求助] 关于swing方面的一些问题
如何改变JTree各个节点的字体及颜色?
如何使JTree用自己的图片显示而不使用系统的?
JTable如何显示图片?
就这三个,最好给个列子,谢谢!
[解决办法]
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> > 高级卷 第六章的原例
[解决办法]
JDK的demo里的例子很丰富的
这些都包括的,在JFC里。
[解决办法]
DefaultTreeCellRenderer
[解决办法]
点页首广告下的 "管理 ".就可以结贴了.