0

今、私はこのコードを持っています

jTable1.getColumn("Progress").setCellRenderer(new TableCellRenderer() {

    @Override
    public Component getTableCellRendererComponent(JTable arg0, Object arg1,
    boolean arg2, boolean arg3, int arg4, int arg5) {
        // TODO Auto-generated method stub
        return new JProgressBar();
    }
});

進行状況を更新したいのですが、もちろんこのコードは機能しません。

なのでこれに変更。

jTable1.getColumn("Progress").setCellRenderer(new TableCellRenderer() {

    @Override
    public Component getTableCellRendererComponent(JTable arg0, Object arg1,
    boolean arg2, boolean arg3, int arg4, int arg5) {
        // TODO Auto-generated method stub
        JProgressBar bar2 = bar; //where bar is another JProgressBar being updated outside.
        return bar2;
    }
});

このコードは機能しますが、問題は、複数の行がある場合、それらの列がすべて同じ値に更新されることです。これは私が望むものではありません。

個々の行の JProgressBar を更新できるようにしたいのですが、どうすればよいですか?

4

1 に答える 1

1

私は似たようなことをしました(JProgressBarの代わりにJSpinner)、次のようにしました:

public class SpinnerRenderer implements TableCellRenderer {
    private JSpinner spinner = new JSpinner();

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {

        checkNotNull(model, "The SpinnerModel from the table model is null");

        if (!(value instanceof SpinnerModel)) {
            System.err.println("Error: The value" + " in cell: row=" + row
                    + " col=" + column + " must be instance"
                    + " of SpinnerModel");
        }else{
            SpinnerModel model = (SpinnerModel)value;
            spinner.setModel(model);
        }

        return spinner;
    }

}

ここでは、スピナーごとに個別の SpinnerModel があるテーブル モデルからデータを取得していることに注意してください。

于 2013-08-20T16:26:02.580 に答える