小編典典
假設您要用其他顔色渲染的單元格代表一種狀态(我将以“拒絕并準許”為例)。然後,我将在我的表模型中實作一個名為getStatus(int
row)的方法,該方法傳回任何給定行的狀态。
然後,到位後,我将建立一個負責渲染單元格所屬列的單元格渲染器。單元格渲染器将在以下代碼行中顯示。
public class StatusColumnCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
//Cells are by default rendered as a JLabel.
JLabel l = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
//Get the status for the current row.
CustomTableModel tableModel = (CustomTableModel) table.getModel();
if (tableModel.getStatus(row) == CustomTableModel.APPROVED) {
l.setBackground(Color.GREEN);
} else {
l.setBackground(Color.RED);
}
//Return the JLabel which renders the cell.
return l;
}
然後,當渲染器就位時,隻需使用以下代碼将渲染器“應用于”表:
Table.getColumnModel().getColumn(columnIndex).setCellRenderer(new StatusColumnCellRenderer());
關于使單元格可編輯,隻需在表模型中實作isCellEditable(int
rowIndex,int
columnIndex)方法即可。如果您想保留使用者提供的值(我想您一定會這樣做),則還需要實作setValueAt方法
(對象值,int rowIndex,int columnIndex)。
2020-09-16