如何改变JTree各个节点的字体及颜色?
如何使JTree用自己的图片显示而不使用系统的?
JTable如何显示图片?
就这三个,最好给个列子,谢谢!

解决方案 »

  1.   

    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>> 高级卷 第六章的原例
      

  2.   

    JDK的demo里的例子很丰富的
    这些都包括的,在JFC里。
      

  3.   

    JTree的呢?
    主要是JTree的各个节点如何用不同的颜色及图片?
    知道的请告知一下。谢谢!
      

  4.   

    搞定了,虽然不是很理想,不知道有更好的方法没。重写TreeCellRenderer接口,但是显示UI细节方面需要自己写。
    所以extends DefualtTreeCellRenderer,重写接口,构造node时传入Label,取参value如下:(valueDefaultMutableNode)value.getUserObject instanceof Label
    把需要用到的图片(valueDefaultMutableNode)value.getUserObject.getIcon()
    后再setLeafIconsuper.接口 传参数还是一样,不过leaf为true,value就传(valueDefaultMutableNode)value.getUserObject.getText()麻烦一个字!!希望对有需要的朋友有用,这样实现不用考虑UI细节方面的问题!感谢FedoraCoreIII(元太) 的源码!