Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JTable中绘制行_Java_Swing - Fatal编程技术网

Java 在JTable中绘制行

Java 在JTable中绘制行,java,swing,Java,Swing,我有一个DefaultTableCellRenderer的实现。当有人在表中选择一行时,该行将亮显为绿色。如果我想突出显示所选行下的行,最简单的方法是什么?甚至不必重新渲染整个表也可以这样做吗 所以现在,我有一些东西看起来像这样: public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int

我有一个DefaultTableCellRenderer的实现。当有人在表中选择一行时,该行将亮显为绿色。如果我想突出显示所选行下的行,最简单的方法是什么?甚至不必重新渲染整个表也可以这样做吗

所以现在,我有一些东西看起来像这样:

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();
    }
});
实际上,您可以更聪明,只重新绘制需要重新绘制的精确行。如果你愿意的话,我将把它作为一个练习(一个困难且不太值得的练习)