java - 如何在jtable中获取单元格内的对象

时间:2012-03-05 23:00:05

标签: java swing jtable jprogressbar tablecellrenderer

  

可能重复:
  Adding multiple JProgressBar to TableColumn of JTable

我有jTable DefaultTableModel与此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

问题出在哪里?你能救我吗?

2 个答案:

答案 0 :(得分: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;
        }
    }

答案 1 :(得分:-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;
    }