-3

可能重复:
将多个 JProgressBar 添加到 JTable 的 TableColumn

我有一个jTableDefaultTableModel这个coloumn:

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;
    }

其中ii1是 0 - 2。所以第一行和第三列( 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 回答