-3

重複の可能性:
JTableのTableColumnに複数のJProgressBarを追加する

私はこの列jTableと一緒にDefaultTableModel持っています:

String String JProgressBar

そして、すべての行は次のように作成されます。

progress.add(getProgress(x, total));
d.addRow(new Object[]{category, "Initializing..", progress.get(work)});

getProgressは次のとおりです。

private JProgressBar getProgress(int x, int total) {
        JProgressBar progressCsv = new JProgressBar();
        progressCsv.setMaximum(totale);
        progressCsv.setStringPainted(true);
        progressCsv.setString("0%");
        return progressCsv;
}

そして進歩:

progress = new ArrayList<JProgressBar>();

私のクラスはTableCellRendererを実装しているので

@Override
    public Component getTableCellRendererComponent(JTable jtable, Object o, boolean bln, boolean bln1, int i, int i1) {
        int v = Integer.parseInt(o.toString());
        JProgressBar b = (JProgressBar) jtable.getModel().getValueAt(i, i1);
        b.setValue(v);
        return null;
    }

ここiで、およびi1は0〜2です。したがって、最初の行と3番目の列(JProgressBar)。

オン:JProgressBar b =(JProgressBar)jtable.getModel()。getValueAt(i、i1); 私は得る

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer cannot be cast to javax.swing.JProgressBar

問題はどこだ?手伝って頂けますか?

4

2 に答える 2

4
JProgressBar b = (JProgressBar) jtable.getModel().getValueAt(i, i1);

これがこのエラーの原因となっている行です。プログレスバーに整数をキャストしたいのですが、もちろん不可能です。このコードは、多くの点で意味がありません。まず、getProgress(int x、int total)メソッドを失います。プログレスバーをjtableにしたい場合は、カスタムセルレンダラーを使用して正しく実行しましたが、実際にプログレスバーをテーブルに追加する必要はありません。代わりに、整数を使用します。次に、セルレンダラーで、その整数を使用してプログレスバーを表示します。レンダラーは次のようになります。

class ProgressBarRenderer extends JProgressBar implements TableCellRenderer {

        public ProgressBarRenderer() {
            setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
            setOpaque(true);
        }

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            int progress = (Integer) value;
            setValue(progress);
            return this;
        }
    }
于 2012-03-06T12:54:49.940 に答える
-2

ArrayListを使用する場合、次のことができます。

public Component getTableCellRendererComponent(JTable jtable, Object o, boolean bln, boolean bln1, int i, int i1) {
        int v = Integer.parseInt(o.toString());
        JProgressBar b = progress.get(i);
        b.setValue(v);
        return b;
    }
于 2012-03-06T23:48:37.597 に答える