JTable - 呈现新的状态变化
JTable - render a new status change
我正在尝试根据侦听器的通知更改 JTable 中的颜色,但我没有成功。
有人可以让我回到正轨吗?
class TableRenderer extends DefaultTableCellRenderer implements SensorListener {
public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
private boolean status;
public TableRenderer() {
status = false;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
Color foreground, background;
foreground = Color.BLACK;
background = Color.WHITE;
if (status == true) {
System.out.println(status);
foreground = Color.WHITE;
background = Color.RED;
status = false;
}
renderer.setForeground(foreground);
renderer.setBackground(background);
return renderer;
}
@Override
public void updateOnSensor(int freq, String extremumType, double price, double support, double resistance, double lowestMin, double highestMax, double minimumTrailing, double maximumTrailing) {
this.status = true;
System.out.println("coucou");
this.repaint();
}
}
我看到了一些问题。
首先,您应该在方法 updateOnSensor 中调用 jtable.repaint() 而不是 this.repaint(),因为它应该重新渲染 jtable。
其次,将为每个单元格调用 getTableCellRendererComponent,如果将状态设置回 false,则只有一个单元格将使用新颜色重新渲染。
我正在尝试根据侦听器的通知更改 JTable 中的颜色,但我没有成功。
有人可以让我回到正轨吗?
class TableRenderer extends DefaultTableCellRenderer implements SensorListener {
public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
private boolean status;
public TableRenderer() {
status = false;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
Color foreground, background;
foreground = Color.BLACK;
background = Color.WHITE;
if (status == true) {
System.out.println(status);
foreground = Color.WHITE;
background = Color.RED;
status = false;
}
renderer.setForeground(foreground);
renderer.setBackground(background);
return renderer;
}
@Override
public void updateOnSensor(int freq, String extremumType, double price, double support, double resistance, double lowestMin, double highestMax, double minimumTrailing, double maximumTrailing) {
this.status = true;
System.out.println("coucou");
this.repaint();
}
}
我看到了一些问题。 首先,您应该在方法 updateOnSensor 中调用 jtable.repaint() 而不是 this.repaint(),因为它应该重新渲染 jtable。
其次,将为每个单元格调用 getTableCellRendererComponent,如果将状态设置回 false,则只有一个单元格将使用新颜色重新渲染。