Object[][] data = {{"李清照",29,"女"},{"蘇格拉底",56,"男"},{"李白",35,"男"}};
Object[] cols = {"姓名","年齡","性別"};
JTable table = new JTable(data, cols);
frame.add(new JScrollPane(table));
透過 `JRadioButtonMenuItem` 動態切換上述屬性,即時觀察效果。
DefaultTableModel model = new DefaultTableModel(COLUMN_COUNT, COLUMN_COUNT);
JTable table = new JTable(model);
// 新增行
model.addRow(new Object[]{"新值1","新值2",...});
// 刪除選中行
for (int i : table.getSelectedRows()) model.removeRow(i);
// 隱藏/顯示列(操作 TableColumnModel)
table.removeColumn(column); // 隱藏
table.addColumn(column); // 顯示(原列對象)
注意:`addColumn` 僅重新顯示已隱藏列,真正新增列需重建 JTable。
class ExtendedTableModel extends DefaultTableModel {
public Class<?> getColumnClass(int c) {
return getValueAt(0, c).getClass(); // 依首行值決定列類型
}
}
class GenderTableCellRenderer extends JPanel implements TableCellRenderer {
private String cellValue;
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
cellValue = (String) value;
setBorder(hasFocus ? UIManager.getBorder("Table.focusCellHighlightBorder") : null);
return this;
}
public void paint(Graphics g) {
if ("男".equalsIgnoreCase(cellValue) || "male".equalsIgnoreCase(cellValue))
drawImage(g, new ImageIcon("icon/male.gif").getImage());
else if ("女".equalsIgnoreCase(cellValue) || "female".equalsIgnoreCase(cellValue))
drawImage(g, new ImageIcon("icon/female.gif").getImage());
}
private void drawImage(Graphics g, Image img) {
g.drawImage(img, (getWidth()-23)/2, (getHeight()-21)/2, null);
}
}
TableColumn genderCol = table.getColumnModel().getColumn(2);
genderCol.setCellRenderer(new GenderTableCellRenderer());