Minor error correction and some bugs, alongside with modify offers quality of life...
[RRRRHHHH_Code] / ruralHouses / src / gui / TableRowRenderingTip.java
1 package gui;
2
3 import java.awt.*;
4 import javax.swing.*;
5 import javax.swing.table.*;
6 import javax.swing.border.*;
7
8 public class TableRowRenderingTip extends JPanel
9 {
10         public TableRowRenderingTip()
11         {
12                 Object[] columnNames = {"Type", "Company", "Shares", "Price", "Boolean"};
13                 Object[][] data =
14                 {
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}
20                 };
21
22                 DefaultTableModel model = new DefaultTableModel(data, columnNames)
23                 {
24                         public Class getColumnClass(int column)
25                         {
26                                 return getValueAt(0, column).getClass();
27                         }
28                 };
29
30                 JTabbedPane tabbedPane = new JTabbedPane();
31                 tabbedPane.addTab("Alternating", createAlternating(model));
32                 tabbedPane.addTab("Border", createBorder(model));
33                 tabbedPane.addTab("Data", createData(model));
34                 add( tabbedPane );
35         }
36
37         private JComponent createAlternating(DefaultTableModel model)
38         {
39                 JTable table = new JTable( model )
40                 {
41                         public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
42                         {
43                                 Component c = super.prepareRenderer(renderer, row, column);
44
45                                 //  Alternate row color
46
47                                 if (!isRowSelected(row))
48                                         c.setBackground(row % 2 == 0 ? getBackground() : Color.LIGHT_GRAY);
49
50                                 return c;
51                         }
52                 };
53
54                 table.setPreferredScrollableViewportSize(table.getPreferredSize());
55                 table.changeSelection(0, 0, false, false);
56                 return new JScrollPane( table );
57         }
58
59         private JComponent createBorder(DefaultTableModel model)
60         {
61
62                 JTable table = new JTable( model )
63                 {
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);
67
68                         public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
69                         {
70                                 Component c = super.prepareRenderer(renderer, row, column);
71                                 JComponent jc = (JComponent)c;
72
73                                 // Add a border to the selected row
74
75                                 if (isRowSelected(row))
76                                         jc.setBorder( highlight );
77
78                                 return c;
79                         }
80                 };
81
82                 table.setPreferredScrollableViewportSize(table.getPreferredSize());
83                 table.changeSelection(0, 0, false, false);
84                 return new JScrollPane( table );
85         }
86
87         private JComponent createData(DefaultTableModel model)
88         {
89                 JTable table = new JTable( model )
90                 {
91                         public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
92                         {
93                                 Component c = super.prepareRenderer(renderer, row, column);
94
95                                 //  Color row based on a cell value
96
97                                 if (!isRowSelected(row))
98                                 {
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);
104                                 }
105
106                                 return c;
107                         }
108                 };
109
110                 table.setPreferredScrollableViewportSize(table.getPreferredSize());
111                 table.changeSelection(0, 0, false, false);
112         table.setAutoCreateRowSorter(true);
113                 return new JScrollPane( table );
114         }
115
116         public static void main(String[] args)
117         {
118                 SwingUtilities.invokeLater(new Runnable() {
119                         public void run() {
120                                 createAndShowGUI();
121                         }
122                 });
123         }
124
125         public static void createAndShowGUI()
126         {
127                 JFrame.setDefaultLookAndFeelDecorated(true);
128                 JFrame frame = new JFrame("Table Row Rendering");
129                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
130                 frame.add( new TableRowRenderingTip() );
131                 frame.pack();
132                 frame.setLocationRelativeTo(null);
133                 frame.setVisible(true);
134         }
135 }