5 import javax.swing.table.*;
6 import javax.swing.border.*;
8 public class TableRowRenderingTip extends JPanel
10 public TableRowRenderingTip()
12 Object[] columnNames = {"Type", "Company", "Shares", "Price", "Boolean"};
15 {"Buy", "IBM", new Integer(1000), new Double(80.5), Boolean.TRUE},
16 {"Sell", "Dell", new Integer(2000), new Double(6.25), Boolean.FALSE},
17 {"Short Sell", "Apple", new Integer(3000), new Double(7.35), Boolean.TRUE},
18 {"Buy", "MicroSoft", new Integer(4000), new Double(27.50), Boolean.FALSE},
19 {"Short Sell", "Cisco", new Integer(5000), new Double(20), Boolean.TRUE}
22 DefaultTableModel model = new DefaultTableModel(data, columnNames)
24 public Class getColumnClass(int column)
26 return getValueAt(0, column).getClass();
30 JTabbedPane tabbedPane = new JTabbedPane();
31 tabbedPane.addTab("Alternating", createAlternating(model));
32 tabbedPane.addTab("Border", createBorder(model));
33 tabbedPane.addTab("Data", createData(model));
37 private JComponent createAlternating(DefaultTableModel model)
39 JTable table = new JTable( model )
41 public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
43 Component c = super.prepareRenderer(renderer, row, column);
45 // Alternate row color
47 if (!isRowSelected(row))
48 c.setBackground(row % 2 == 0 ? getBackground() : Color.LIGHT_GRAY);
54 table.setPreferredScrollableViewportSize(table.getPreferredSize());
55 table.changeSelection(0, 0, false, false);
56 return new JScrollPane( table );
59 private JComponent createBorder(DefaultTableModel model)
62 JTable table = new JTable( model )
64 private Border outside = new MatteBorder(1, 0, 1, 0, Color.RED);
65 private Border inside = new EmptyBorder(0, 1, 0, 1);
66 private Border highlight = new CompoundBorder(outside, inside);
68 public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
70 Component c = super.prepareRenderer(renderer, row, column);
71 JComponent jc = (JComponent)c;
73 // Add a border to the selected row
75 if (isRowSelected(row))
76 jc.setBorder( highlight );
82 table.setPreferredScrollableViewportSize(table.getPreferredSize());
83 table.changeSelection(0, 0, false, false);
84 return new JScrollPane( table );
87 private JComponent createData(DefaultTableModel model)
89 JTable table = new JTable( model )
91 public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
93 Component c = super.prepareRenderer(renderer, row, column);
95 // Color row based on a cell value
97 if (!isRowSelected(row))
99 c.setBackground(getBackground());
100 int modelRow = convertRowIndexToModel(row);
101 String type = (String)getModel().getValueAt(modelRow, 0);
102 if ("Buy".equals(type)) c.setBackground(Color.GREEN);
103 if ("Sell".equals(type)) c.setBackground(Color.YELLOW);
110 table.setPreferredScrollableViewportSize(table.getPreferredSize());
111 table.changeSelection(0, 0, false, false);
112 table.setAutoCreateRowSorter(true);
113 return new JScrollPane( table );
116 public static void main(String[] args)
118 SwingUtilities.invokeLater(new Runnable() {
125 public static void createAndShowGUI()
127 JFrame.setDefaultLookAndFeelDecorated(true);
128 JFrame frame = new JFrame("Table Row Rendering");
129 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
130 frame.add( new TableRowRenderingTip() );
132 frame.setLocationRelativeTo(null);
133 frame.setVisible(true);