⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tablecellrendertest.java

📁 sun公司开发的,java2核心技术,卷II:高级性能,包括一系列的高级java应用技术,如数据库德连接,高级swing,多线程,软件本地化等等,本文件中则包含该书中的所用实例,配合该书使用,使对ja
💻 JAVA
字号:
/**
 * @version 1.00 1999-07-17
 * @author Cay Horstmann
 */

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

public class TableCellRenderTest
{  public static void main(String[] args)
   {  JFrame frame = new TableCellRenderFrame();
      frame.show();
   }
}

/* 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"
      };
}

class TableCellRenderFrame extends JFrame
{  public TableCellRenderFrame()
   {  setTitle("TableCellRenderTest");
      setSize(300, 200);
      addWindowListener(new WindowAdapter()
         {  public void windowClosing(WindowEvent e)
            {  System.exit(0);
            }
         } );

      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);
      Container contentPane = getContentPane();
      contentPane.add(new JScrollPane(table), "Center");
   }
}

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();
}

class ColorTableCellEditor extends ColorTableCellRenderer
   implements TableCellEditor
{  ColorTableCellEditor()
   {  // prepare color dialog

      colorChooser = new JColorChooser();
      colorDialog = JColorChooser.createDialog(null,
         "Planet Color", false, colorChooser,
         new ActionListener() // OK button listener
         {  public void actionPerformed(ActionEvent event)
            {  fireEditingStopped();
            }
         },
         new ActionListener() // Cancel button listener
         {  public void actionPerformed(ActionEvent event)
            {  fireEditingCanceled();
            }
         });
   }

   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 getTableCellRendererComponent(table, value,
         isSelected, true, row, column);
   }

   public boolean isCellEditable(EventObject anEvent)
   {  return true;
   }

   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);
   }

   public boolean stopCellEditing()
   {  // editing is complete--hide dialog
      colorDialog.setVisible(false);

      // tell caller is is ok to use color value
      return true;
   }

   public Object getCellEditorValue()
   {  return colorChooser.getColor();
   }

   public void addCellEditorListener(CellEditorListener l)
   {  listenerList.add(CellEditorListener.class, l);
   }

   public void removeCellEditorListener(CellEditorListener l)
   {  listenerList.remove(CellEditorListener.class, l);
   }

   protected void fireEditingStopped()
   {  Object[] listeners = listenerList.getListenerList();
      for (int i = listeners.length - 2; i >= 0; i -= 2)
         ((CellEditorListener)listeners[i+1]).
               editingStopped(event);
   }

   protected void fireEditingCanceled()
   {  Object[] listeners = listenerList.getListenerList();
      for (int i = listeners.length - 2; i >= 0; i -= 2)
         ((CellEditorListener)listeners[i+1]).
               editingCanceled(event);
   }

   private Color color;
   private JColorChooser colorChooser;
   private JDialog colorDialog;
   private EventListenerList listenerList
      = new EventListenerList();
   private ChangeEvent event
      = new ChangeEvent(this);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -