嘿所有我试图让这个工作,因为我需要它。目前它确实在我点击的行周围放置了一个红色边框但是当我点击不同的行时它会远离第一行,依此类推,依此类推。
这就是我的jtable看起来像:
这是我的java代码将边框应用到行上:
table = new JTable(model) {
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
JComponent jc = (JComponent)c;
int selCol = table.getSelectedColumn();
int lastRow = table.getRowCount();
// Color row based on a cell value
if (isRowSelected(row)){
int top = (row > 0 && isRowSelected(row - 1)) ? 1 : 2;
int left = column == 0 ? 2 : 0;
int bottom = (row < getRowCount() - 1 && isRowSelected(row + 1)) ? 1 : 2;
int right = column == getColumnCount() - 1 ? 2 : 0;
jc.setBorder(BorderFactory.createMatteBorder(top, left, bottom, right, Color.RED));
}
return c;
}
};
那么当我移动到另一行时,为了让行边框保持颜色,我忘记做什么呢?
第一件事:表可以通过重用一个单独的组件来绘制所有单元格。组件重用意味着不保存任何状态,如border / color。
if (isRowSelected(row)) {
int top = (row > 0 && isRowSelected(row - 1)) ? 1 : 2;
int left = column == 0 ? 2 : 0;
int bottom = (row < getRowCount() - 1 && isRowSelected(row + 1)) ? 1 : 2;
int right = column == getColumnCount() - 1 ? 2 : 0;
jc.setBorder(BorderFactory.createMatteBorder(top, left, bottom, right, Color.RED));
} else {
jc.setBorder(BorderFactory.createEmptyBorder();
}
然后有明显的isRowSelected(row)
。如果单击新行在单选模式中选择该行(仅选择一行),则效果将如下所述。所以检查选择。