Java 在JTable中绘制行
我有一个DefaultTableCellRenderer的实现。当有人在表中选择一行时,该行将亮显为绿色。如果我想突出显示所选行下的行,最简单的方法是什么?甚至不必重新渲染整个表也可以这样做吗 所以现在,我有一些东西看起来像这样:Java 在JTable中绘制行,java,swing,Java,Swing,我有一个DefaultTableCellRenderer的实现。当有人在表中选择一行时,该行将亮显为绿色。如果我想突出显示所选行下的行,最简单的方法是什么?甚至不必重新渲染整个表也可以这样做吗 所以现在,我有一些东西看起来像这样: public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (isSelected) {
component.setBackground(Color.GREEN);
// Somewhere here I would like to retrieve the row below the current row and give it another color
} else {
component.setBackground(Color.WHITE);
}
return component;
}
把你的想法转一转。您不需要选定行的渲染器来控制下面的行。您应该做的是检查每一行,看看上面的行是否被选中,如果是,它就会高亮显示自己
if (table.isRowSelected(row - 1)) {
// Highlight self.
component.setBackground(Color.YELLOW);
}
您可能还需要在选择更改时重新绘制高亮显示的行。我怀疑Java只会重新绘制默认选中/取消选中的行,因此下面的行不会重新绘制。我当前的机器上没有JDK,因此无法进行测试,但如果是这样的话,那么类似这样的东西应该可以解决问题:
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent event) {
table.repaint();
}
});
实际上,您可以更聪明,只重新绘制需要重新绘制的精确行。如果你愿意的话,我将把它作为一个练习(一个困难的、不太值得的练习)。把你的想法转一转。您不需要选定行的渲染器来控制下面的行。您应该做的是检查每一行,看看上面的行是否被选中,如果是,它就会高亮显示自己
if (table.isRowSelected(row - 1)) {
// Highlight self.
component.setBackground(Color.YELLOW);
}
您可能还需要在选择更改时重新绘制高亮显示的行。我怀疑Java只会重新绘制默认选中/取消选中的行,因此下面的行不会重新绘制。我当前的机器上没有JDK,因此无法进行测试,但如果是这样的话,那么类似这样的东西应该可以解决问题:
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent event) {
table.repaint();
}
});
实际上,您可以更聪明,只重新绘制需要重新绘制的精确行。如果你愿意的话,我将把它作为一个练习(一个困难且不太值得的练习)