//Link to the Code:
//http://www.java2s.com/Tutorial/Java/0240__Swing/CreatingaJTablewithrowsofvariableheight.htm
//In this Example it is suggested to use the line:
//table.setRowHeight(row, getPreferredSize().height + row * 10);
//to set the variable Row height in a Cell of a JTable.
//This works so far; however, this call triggers a new Layout of the table
//and causes the CellRenderer to render this Cell again. So this code
//creates a loop.
//I found a snippet where this is solved by testing, if the preferredSize
//of the component + the offset is equal to the height of the row. If it
//is equal, the new RowHeight won't be set and the call will be skipped.
//Examplecode:
//int offset = row * 10;
//if (getPreferredSize().height+offset != table.getRowHeight(row)) {
// table.setRowHeight(row, getPreferredSize().height +offset);
//}
//best regards
//Matthias Bonora (mat.bonora AT gmail.com)
import java.awt.Color;
import java.awt.Component;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
public class Main {
public static void main(String[] argv) {
JFrame demoFrame = new JFrame("Variable Row Height Table Demo");
StringTableModel imageTableModel = new StringTableModel();
JTable imageTable = new JTable(imageTableModel);
imageTable.getColumnModel().getColumn(0).setCellRenderer(new VariableRowHeightRenderer());
demoFrame.getContentPane().add(new JScrollPane(imageTable));
demoFrame.pack();
demoFrame.setVisible(true);
}
}
class VariableRowHeightRenderer extends JLabel implements TableCellRenderer {
public VariableRowHeightRenderer() {
super();
setOpaque(true);
setHorizontalAlignment(JLabel.CENTER);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
if (isSelected) {
setBackground(UIManager.getColor("Table.selectionBackground"));
}
if (hasFocus) {
setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
if (table.isCellEditable(row, column)) {
super.setForeground(UIManager.getColor("Table.focusCellForeground"));
super.setBackground(UIManager.getColor("Table.focusCellBackground"));
}
} else {
setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
}
setText((String) (value));
table.setRowHeight(row, getPreferredSize().height + row * 10);
return this;
}
}
class StringTableModel extends AbstractTableModel {
public static final int IMG_COL = 0;
public String[] m_colNames = { "Variable Dimension" };
public Class[] m_colTypes = { String.class };
public StringTableModel() {
super();
}
public int getColumnCount() {
return m_colNames.length;
}
public int getRowCount() {
return 3;
}
public String getColumnName(int col) {
return "" + col;
}
public Object getValueAt(int row, int col) {
return "aa";
}
}
14.58.JTable |
| 14.58.1. | Creating a JTable | |
| 14.58.2. | Creating a JTable with rows of variable height |
| 14.58.3. | Creating a Scrollable JTable Component |
| 14.58.4. | public JTable(Vector rowData, Vector columnNames) | |
| 14.58.5. | Retrieve the value in the visible cell (1,2) in a JTable |
| 14.58.6. | Retrieve the value in cell (1,2) from the model |
| 14.58.7. | Build a table from list data and column names |
| 14.58.8. | To change cell contents in code: setValueAt(Object value, int row, int column) method of JTable. | |
| 14.58.9. | Disable auto resizing to make the table horizontal scrollable |
| 14.58.10. | Manually Positioning the JTable View | |
| 14.58.11. | Selection Modes | |
| 14.58.12. | Printing Tables Sample | |
| 14.58.13. | Specify the print mode: public boolean print(JTable.PrintMode printMode) | |
| 14.58.14. | Specify a page header or footer during printing | |
| 14.58.15. | No user interaction to print | |
| 14.58.16. | Listening to JTable Events with a TableModelListener | |
| 14.58.17. | Control the selection of rows or columns or individual cells | |
| 14.58.18. | Table selection mode |
| 14.58.19. | JTable with Tooltip |
| 14.58.20. | Table Selection Events and Listeners | |
| 14.58.21. | Print a JTable out |
| 14.58.22. | JTable Look and Feel |
| 14.58.23. | Listening for Selection Events in a JTable Component |
| 14.58.24. | Listening for Changes to the Rows and Columns of a JTable Component |
| 14.58.25. | Listening for Column-Related Changes in a JTable Component |
| 14.58.26. | Programmatically Starting Cell Editing in a JTable Component |
| 14.58.27. | Select a column - column 0 in a JTable |
| 14.58.28. | Select an additional range of columns - columns 1 to 2 |
| 14.58.29. | Deselect a range of columns - columns 0 to 1 |
| 14.58.30. | Select a row - row 0 |
| 14.58.31. | Select an additional range of rows - rows 1 to 2 |
| 14.58.32. | Deselect a range of rows - rows 0 to 1 |
| 14.58.33. | Select a cell: cell (2,1) |
| 14.58.34. | Select all cells |
| 14.58.35. | Deselect all cells |
| 14.58.36. | Enable row selection (default) in a JTable |
| 14.58.37. | Enable column selection in a JTable |
| 14.58.38. | Enable cell selection in a JTable |
| 14.58.39. | When the width of a column is changed, the width of the right-most column is changed |
| 14.58.40. | When the width of a column is changed, all columns to the right are resized |
| 14.58.41. | When the width of a column is changed, only the columns to the left and right of the margin change |
| 14.58.42. | When the width of a column is changed, the widths of all columns are changed |
| 14.58.43. | Use a regexFilter to filter table content |
| 14.58.44. | Don't show any grid lines |
| 14.58.45. | Show only vertical grid lines |
| 14.58.46. | Show only horizontal grid lines |
| 14.58.47. | Set the grid color |
| 14.58.48. | Show both horizontal and vertical grid lines (the default) |
| 14.58.49. | Getting the Gap Size Between Cells in a JTable Component |
| 14.58.50. | Add 5 spaces to the left and right sides of a cell. |
| 14.58.51. | Scrolling a Cell to the Center of a JTable Component |
| 14.58.52. | Setting Tool Tips on Cells in a JTable Component |
| 14.58.53. | Getting the Number of Rows and Columns in a JTable Component |
| 14.58.54. | Making a Cell Visible in a JTable Component |
| 14.58.55. | Increase the row height |
| 14.58.56. | Determining If a Cell Is Visible in a JTable Component |
| 14.58.57. | Allowing the User to Resize a Column in a JTable Component |
| 14.58.58. | Disabling User Edits in a JTable |
| 14.58.59. | Creating image out of a JTable |