01: package abbot.tester;
02:
03: import java.awt.*;
04:
05: import javax.swing.JTable;
06: import abbot.script.ArgumentParser;
07:
08: /** Provide user actions on a JTable.
09: The JTable substructure is a "Cell", and JTableLocation provides different
10: identifiers for a cell.
11: <ul>
12: <li>Select a cell by row, column index
13: <li>Select a cell by value (its string representation)
14: </ul>
15:
16: @see abbot.tester.JTableLocation
17: */
18: // TODO: multi-select
19: public class JTableTester extends JComponentTester {
20:
21: /** Convert the value in the list at the given index into a reasonable
22: string representation, or null if one can not be obtained.
23: */
24: public static String valueToString(JTable table, int row, int col) {
25: Object value = table.getValueAt(row, col);
26: Component cr = table.getCellRenderer(row, col)
27: .getTableCellRendererComponent(table, value, false,
28: false, row, col);
29: String string = convertRendererToString(cr);
30: return string;
31: }
32:
33: /** Select the given cell, if not already. */
34: public void actionSelectCell(Component c, JTableLocation loc) {
35: JTable table = (JTable) c;
36: JTableLocation.Cell cell = loc.getCell(table);
37: if (table.isRowSelected(cell.row)
38: && table.isColumnSelected(cell.col)
39: && table.getSelectedRowCount() == 1) {
40: return;
41: }
42: actionClick(c, loc);
43: }
44:
45: /** Select the given cell, if not already.
46: Equivalent to actionSelectCell(c, new JTableLocation(row, col)).
47: */
48: public void actionSelectCell(Component c, int row, int col) {
49: actionSelectCell(c, new JTableLocation(row, col));
50: }
51:
52: /** Parse the String representation of a JTableLocation into the actual
53: JTableLocation object.
54: */
55: public ComponentLocation parseLocation(String encoded) {
56: return new JTableLocation().parse(encoded);
57: }
58:
59: /** Return (in order of preference) the location corresponding to value,
60: * cell, or coordinate.
61: */
62: public ComponentLocation getLocation(Component c, Point p) {
63: JTable table = (JTable) c;
64: int row = table.rowAtPoint(p);
65: int col = table.columnAtPoint(p);
66: if (row != -1 && col != -1) {
67: String value = valueToString(table, row, col);
68: if (value != null) {
69: return new JTableLocation(value);
70: }
71: return new JTableLocation(row, col);
72: }
73: return new JTableLocation(p);
74: }
75: }
|