2121package processing .mode .java .pdex ;
2222
2323import java .awt .Color ;
24+ import java .awt .Component ;
25+ import java .awt .Dimension ;
2426import java .awt .Font ;
2527import java .awt .FontMetrics ;
2628import java .awt .event .*;
3032import javax .swing .event .ListSelectionEvent ;
3133import javax .swing .event .ListSelectionListener ;
3234import javax .swing .table .JTableHeader ;
35+ import javax .swing .table .TableCellRenderer ;
3336import javax .swing .table .TableColumnModel ;
3437import javax .swing .table .TableModel ;
3538import javax .swing .text .BadLocationException ;
3639
3740import processing .app .Language ;
3841import processing .app .Messages ;
42+ import processing .app .Mode ;
3943import processing .app .ui .Editor ;
40- import processing .app .ui .Toolkit ;
4144import processing .mode .java .JavaEditor ;
4245
4346
@@ -55,21 +58,33 @@ public class XQErrorTable extends JTable {
5558 /** Is the column being resized? */
5659 private boolean columnResizing = false ;
5760
61+ Font headerFont ;
62+ Color headerColor ;
63+ Color headerBgColor ;
64+
65+ Font rowFont ;
66+ Color rowColor ;
67+ Color rowBgColor ;
68+
5869
5970 public XQErrorTable (final JavaEditor editor ) {
6071 this .editor = editor ;
6172 JTableHeader header = getTableHeader ();
6273
63- // Try to make things a little less awful until I find time to finish it
64- Font font = Toolkit . getSansFont ( 12 , Font . PLAIN );
65- setFont ( font );
66- header . setFont ( font );
67- //setBorder (new EmptyBorder (0, Editor.LEFT_GUTTER, 0, 0 )); // no effect
74+ Mode mode = editor . getMode ();
75+ header . setDefaultRenderer ( new GradyHeaderRenderer ( mode ) );
76+ setDefaultRenderer ( Object . class , new GradyRowRenderer ( mode ) );
77+ //setShowGrid(false );
78+ setIntercellSpacing (new Dimension (0 , 0 ));
6879
80+ // this did nothing, no columns existed yet
81+ /*
6982 TableColumnModel columnModel = getColumnModel();
7083 for (int i = 0; i < columnModel.getColumnCount(); i++) {
7184 columnModel.getColumn(i).setPreferredWidth(columnWidths[i]);
85+ //System.out.println("class is " + columnModel.getColumn(i).getClass());
7286 }
87+ */
7388
7489 addMouseListener (new MouseAdapter () {
7590 @ Override
@@ -118,7 +133,7 @@ public void mouseMoved(MouseEvent evt) {
118133
119134 // Handles the resizing of columns. When mouse press is detected on
120135 // table header, Stop updating the table, store new values of column
121- // widths,and resume updating. Updating is disabled as long as
136+ // widths, and resume updating. Updating is disabled as long as
122137 // columnResizing is true
123138 header .addMouseListener (new MouseAdapter () {
124139
@@ -150,7 +165,6 @@ public boolean isCellEditable(int rowIndex, int colIndex) {
150165
151166 /**
152167 * Updates table contents with new data
153- * @param tableModel - TableModel
154168 * @return boolean - If table data was updated
155169 */
156170 synchronized public boolean updateTable (final TableModel tableModel ) {
@@ -264,4 +278,68 @@ public void windowGainedFocus(WindowEvent e) {
264278 frmImportSuggest .pack ();
265279 frmImportSuggest .setVisible (true );
266280 }
281+
282+
283+ // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
284+
285+
286+ static class GradyHeaderRenderer extends JLabel implements TableCellRenderer {
287+
288+ public GradyHeaderRenderer (Mode mode ) {
289+ setFont (mode .getFont ("errors.header.font" ));
290+ setAlignmentX (LEFT_ALIGNMENT );
291+
292+ setForeground (mode .getColor ("errors.header.fgcolor" ));
293+ setBackground (mode .getColor ("errors.header.bgcolor" ));
294+ setOpaque (true );
295+ }
296+
297+ @ Override
298+ public Component getTableCellRendererComponent (JTable table , Object value ,
299+ boolean selected ,
300+ boolean focused ,
301+ int row , int column ) {
302+ setText (value == null ? "" : value .toString ());
303+ return this ;
304+ }
305+ }
306+
307+
308+ // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
309+
310+
311+ static class GradyRowRenderer extends JLabel implements TableCellRenderer {
312+ Color textColor ;
313+ Color bgColor ;
314+ Color textColorSelected ;
315+ Color bgColorSelected ;
316+
317+ public GradyRowRenderer (Mode mode ) {
318+ setFont (mode .getFont ("errors.row.font" ));
319+ setAlignmentX (LEFT_ALIGNMENT );
320+
321+ textColor = mode .getColor ("errors.row.fgcolor" );
322+ bgColor = mode .getColor ("errors.row.bgcolor" );
323+ textColorSelected = mode .getColor ("errors.selection.fgcolor" );
324+ bgColorSelected = mode .getColor ("errors.selection.bgcolor" );
325+ setOpaque (true );
326+ }
327+
328+ @ Override
329+ public Component getTableCellRendererComponent (JTable table , Object value ,
330+ boolean selected ,
331+ boolean focused ,
332+ int row , int column ) {
333+ setBackground (Color .RED );
334+ if (selected ) {
335+ setForeground (textColorSelected );
336+ setBackground (bgColorSelected );
337+ } else {
338+ setForeground (textColor );
339+ setBackground (bgColor );
340+ }
341+ setText (value == null ? "" : value .toString ());
342+ return this ;
343+ }
344+ }
267345}
0 commit comments