ОК, я знаю, как сделать простой пользовательский JComponent. Я знаю, как переопределить TableCellRenderer. Я не могу объединить их.
Вот пример JComponent
Я создал:
public static class BarRenderer extends JComponent
{
final private double xmin;
final private double xmax;
private double xval;
public BarRenderer(double xmin, double xmax)
{
this.xmin=xmin;
this.xmax=xmax;
}
@Override protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Rectangle r = g.getClipBounds();
g.drawRect(r.x, r.y,
(int)(r.width * ((xval-xmin)/(xmax-xmin))), r.height);
}
public void setXval(double x) {
this.xval = x;
repaint();
}
public double getXval() { return xval; }
}
Отлично работает как автономный JComponent. Я звоню setXval(something)
, и он просто обновляется. (редактировать: у меня есть Swing Timer, который периодически обновляет данные)
Но если этот компонент является чем-то, что я возвращаю в TableCellRenderer.getTableCellRendererComponent (), то он перерисовывается только когда я щелкаю по соответствующей ячейке. Что дает? Должно быть, я упускаю что-то действительно простое.