2

私は次の問題を抱えています:

コマンドの進行状況を示すJTableがあります。2種類のコマンドがあります。決定されたコマンドと決定されていないコマンド。

テーブルに未確定の進行状況バーしかない場合、進行状況は正しく表示されます。しかし、1つの決定された進行状況バーがある場合、他の決定されていない進行状況はアニメーション化されません。

これが私のコードです:

class ProgressBarRenderer implements TableCellRenderer {

    /** The bar. */
    private JProgressBar bar = new JProgressBar() {
        public boolean isDisplayable() {
            return true;
        };
    };

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        ProgressBarInfo pbi = (ProgressBarInfo) value;
        if (pbi.getType() == Progress.LS) {
            if (pbi.getValue() == -1) {
                bar.setIndeterminate(false);
                bar.setValue(0);
                bar.setString("Progress ended");
            } else {
                bar.setIndeterminate(true);
                bar.setString(pbi.getValue() + " " + pbi.getText());
            }
            bar.setStringPainted(true);

            return bar;
        } else if (pbi.getType() == Progress.SCP) {
            if (pbi.getValue() == -1) {
                bar.setIndeterminate(false);
                bar.setValue(0);
                bar.setString("Progress ended");
            } else {
                bar.setValue(pbi.getValue());
                bar.setString(pbi.getValue() + "% " + pbi.getText());
            }
            bar.setIndeterminate(false);
            bar.setStringPainted(true);
        }
        return bar;
    }
}

テーブルはswingworkerスレッドによって10ミリ秒ごとに更新されるので、気にしないでください。

4

2 に答える 2

5

progressBarの内部状態(確定と不確定)は大きく異なります。同じインスタンスでそれらを切り替えることが理由である可能性があります。それぞれに1つのインスタンスを使用してみてください

public class MyRenderer ....
    JProgressBar determinate;
    JProgressBar indeterminate; 

    public Component getTableCellRendererComponent(...) {
         if (value.isDeterminate) {
           ...
           return determinate;
         }
         ....
         return undeterminate
    } 

編集

チェック済み:動作しています、「段階的に」アニメーション化された多くの不確定なセルでは少し奇妙に見えるかもしれません。注意してください:内部(UIデリゲート内)のアニメーション状態は文書化されていないため、まったく機能しないLAFが存在する可能性があります(fiSubstance、afair)。

于 2012-03-01T11:23:20.760 に答える
3

Swingの同時実行性に問題がある可能性があります。基本的に、2つの方法があります。

于 2012-03-01T09:36:46.397 に答える