JTable selection events
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.border.Border;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
public class TableIt {
class MyTableCellRenderer extends JLabel implements TableCellRenderer {
final Border blueBorder = BorderFactory.createLineBorder(Color.BLUE);
MyTableCellRenderer() {
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int col) {
setBackground((Color) value);
if (isSelected) {
setBorder(blueBorder);
} else {
setBorder(BorderFactory.createEmptyBorder());
}
return this;
}
}
class MyTableModel extends DefaultTableModel {
Object data[][] = { { "1", Color.RED }, { "2", Color.ORANGE },
{ "3", Color.YELLOW }, { "4", Color.GREEN },
{ "5", Color.BLUE }, { "6", Color.MAGENTA },
{ "7", Color.CYAN }, { "8", Color.PINK },
{ "9", Color.BLACK }, { "10", Color.GRAY } };
MyTableModel() {
setColumnIdentifiers(new String[] { "ID", "Name", "Color" });
for (int i = 0, n = data.length; i < n; i++)
addRow(new Object[] { new Integer(i + 1), data[i][0],
data[i][1] });
}
public boolean isCellEditable(int row, int column) {
return (column != 0);
}
}
public TableIt() {
JFrame f = new JFrame();
TableModel tm = new MyTableModel();
final JTable table = new JTable(tm);
TableColumnModel tcm = table.getColumnModel();
TableColumn column = tcm.getColumn(tcm.getColumnCount() - 1);
TableCellRenderer renderer = new MyTableCellRenderer();
column.setCellRenderer(renderer);
JButton selectionType = new JButton("Next Type");
selectionType.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
boolean rowSet = table.getRowSelectionAllowed();
boolean colSet = table.getColumnSelectionAllowed();
boolean cellSet = table.getCellSelectionEnabled();
boolean setRow = !rowSet;
boolean setCol = rowSet ^ colSet;
boolean setCell = rowSet & colSet;
table.setCellSelectionEnabled(setCell);
table.setColumnSelectionAllowed(setCol);
table.setRowSelectionAllowed(setRow);
System.out.println("Row Selection Allowed? " + setRow);
System.out.println("Column Selection Allowed? " + setCol);
System.out.println("Cell Selection Enabled? " + setCell);
table.repaint();
}
});
JButton selectionMode = new JButton("Next Mode");
selectionMode.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ListSelectionModel lsm = table.getSelectionModel();
int mode = lsm.getSelectionMode();
int nextMode;
String nextModeString;
if (mode == ListSelectionModel.SINGLE_SELECTION) {
nextMode = ListSelectionModel.SINGLE_INTERVAL_SELECTION;
nextModeString = "Single Interval Selection";
} else if (mode == ListSelectionModel.SINGLE_INTERVAL_SELECTION) {
nextMode = ListSelectionModel.MULTIPLE_INTERVAL_SELECTION;
nextModeString = "Multiple Interval Selection";
} else {
nextMode = ListSelectionModel.SINGLE_SELECTION;
nextModeString = "Single Selection";
}
lsm.setSelectionMode(nextMode);
System.out.println("Selection Mode: " + nextModeString);
table.repaint();
}
});
JPanel jp = new JPanel();
jp.add(selectionType);
jp.add(selectionMode);
JScrollPane jsp = new JScrollPane(table);
Container c = f.getContentPane();
c.add(jsp, BorderLayout.CENTER);
c.add(jp, BorderLayout.SOUTH);
f.setSize(300, 250);
f.show();
}
public static void main(String args[]) {
new TableIt();
}
}
Related examples in the same category
1. | Creating a JTable Component | | |
2. | Creates tables that allow rows and columns to be added or deleted | | |
3. | Build a table from list data and column names | | |
4. | Getting the Number of Rows and Columns in a JTable Component | | |
5. | Appending a Row to a JTable Component | | |
6. | Add columns to a table through DefaultTableModel | | |
7. | Insert a row to a table through DefaultTableModel | | |
8. | Insert a row to a table through DefaultTableModel at specified row | | |
9. | Scroll Table Sample | | |
10. | Simple demonstration of JTable | | |
11. | Create a table with two dimensional array | | |
12. | Create table with Unicode data | | |
13. | Resize Table | | |
14. | Expense Table | | |
15. | StockTable 6: Action and Dynamic Display | | |
16. | A table with the ability to play with row and column selections | | |
17. | Table Selection mode | | |
18. | Display ResultSet in Table (JTable) | | |
19. | JTable(Table) with JDBC and ResultSet | | |
20. | List UI Properties in a JTable and sortable | | |
21. | Property Table: Use JTable to display and edit properties | | |
22. | Table with tool tips for both cells and column headers | | |
23. | StockTable 4: Table Sorter | | |
24. | JTable sorter:click the table header to sort a column and a table | | |
25. | Creating image out of a JTable | | |
26. | JTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); | | |
27. | JTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); | | |
28. | JTable.setColumnSelectionAllowed(boolean b); | | |
29. | JTable.setRowSelectionAllowed(boolean b); | | |
30. | JTable.setCellSelectionEnabled(boolean b); | | |
31. | Handle selection and model change events for a JTable. | | |
32. | ListSelectionModel rowSelMod = JTable.getSelectionModel(); | | |
33. | ListSelectionModel colSelMod = JTable.getColumnModel().getSelectionModel(); | | |
34. | JTree.getModel().addTreeModelListener(new TreeModelListener()) | | |
35. | Move the last visible column so it becomes the first visible column | | |
36. | the last column is moved to the first position | | |
37. | Allowing the User to Resize a Column in a JTable Component | | |
38. | Retrieve the value in the visible cell (1,2) in a JTable | | |
39. | Retrieve the value in cell (1,2) from the model | | |
40. | Change a cell in the 2nd visible column | | |
41. | Change a cell in the 3rd column in the model | | |
42. | Showing the Table Header in a Non-Scrollable JTable Component | | |
43. | Changing the Name of a Column in a JTable Component | | |
44. | Displaying an Icon in a Column Head of a JTable Component | | |
45. | Implementing Variable-Height Column Headers in a JTable Component | | |
46. | Removing the Column Headers from a Scrollable in a JTable Component | | |
47. | Creating a Custom Column Header Renderer in a JTable Component | | |
48. | Setting Column Header Tool Tips in a JTable Components | | |
49. | Setting Tool Tips on Cells in a JTable Component | | |
50. | Enable row selection (default) in a JTable | | |
51. | Enable column selection in a JTable | | |
52. | Enable cell selection in a JTable | | |
53. | Get default selection mode:MULTIPLE_INTERVAL_SELECTION | | |
54. | Allow only single a selection | | |
55. | Allow selection to span one contiguous set of rows, visible columns, or block of cells | | |
56. | Allow multiple selections of rows, visible columns, or cell blocks (default) | | |
57. | Select a column - column 0 in a JTable | | |
58. | Select an additional range of columns - columns 1 to 2 | | |
59. | Deselect a range of columns - columns 0 to 1 | | |
60. | Select a row - row 0 | | |
61. | Select an additional range of rows - rows 1 to 2 | | |
62. | Deselect a range of rows - rows 0 to 1 | | |
63. | Select a cell: cell (2,1) | | |
64. | Extend the selection to include all cells (5,3) | | |
65. | Deselect a cell: cell (3,2), All cells in the row and column containing (3,2) are deselected. | | |
66. | Toggles the selection state, if it were called again, it exactly reverses the first call. | | |
67. | Select all cells | | |
68. | Deselect all cells | | |
69. | Column selection is enabled, get the indices of the selected columns | | |
70. | Row selection is enabled, Get the indices of the selected rows | | |
71. | Get selected row and selected index | | |
72. | Get the min and max ranges of selected cells | | |
73. | Check each cell in the min and max ranges of selected cells | | |
74. | Disabling Selections in a JTable Component | | |
75. | Getting the Anchor Cell in a JTable Component | | |
76. | Creating a Scrollable JTable Component | | |
77. | Disable auto resizing to make the table horizontal scrollable | | |
78. | Determining If a Cell Is Visible in a JTable Component | | |
79. | Making a Cell Visible in a JTable Component | | |
80. | Scrolling a Cell to the Center of a JTable Component | | |
81. | Show both horizontal and vertical grid lines (the default) | | |
82. | Don't show any grid lines | | |
83. | Show only vertical grid lines | | |
84. | Show only horizontal grid lines | | |
85. | Set the grid color | | |
86. | Getting the Gap Size Between Cells in a JTable Component | | |
87. | Add 5 spaces to the left and right sides of a cell. | | |
88. | Increase the row height | | |
89. | Programmatically Starting Cell Editing in a JTable Component | | |
90. | Save the current value in the cell being edited and stops the editing process | | |
91. | Discard any changes made by the user and stops the editing process | | |
92. | Disabling User Edits in a JTable | | |
93. | Disabling User Edits in a JTable with DefaultTableModel | | |
94. | Sorting the Rows in a JTable Component Based on a Column | | |
95. | Sorting a Column in a JTable Component | | |
96. | Listening for Selection Events in a JTable Component | | |
97. | Listening for Changes to the Rows and Columns of a JTable Component | | |
98. | Listening for Column-Related Changes in a JTable Component | | |
99. | Listening for Clicks on a Column Header in a JTable Component | | |
100. | Sorting and Filtering Tables | | |
101. | Use a regexFilter to filter table content | | |
102. | Creating a JTable with rows of variable height | | |
103. | Scroll JTable To Center | | |