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

java-如何在jtable中获取单元格内的对象,java,swing,jtable,jprogressbar,tablecellrenderer,Java,Swing,Jtable,Jprogressbar,Tablecellrenderer,可能重复: 我有一个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, i

可能重复:

我有一个
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>();
其中
i
i1
为0-2。第一行和第三列(JProgressBar)

关于: JProgressBar b=(JProgressBar)jtable.getModel().getValueAt(i,i1); 我明白了

问题在哪里?你能帮我吗

JProgressBar b = (JProgressBar) jtable.getModel().getValueAt(i, i1);
这是导致此错误的行。您想要将整数强制转换为进度条,这当然是不可能的。这段代码在很多方面都没有意义。 首先,丢失getProgress(intx,inttotal)方法。如果您希望在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;
        }
    }

如果使用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;
    }

所以你是说我不需要手动添加进度条,但在我的jtable列中设置新的ProgressBarDerrer,progressbar是在方法GetTableCellRenderComponent上自动设置的?如果我需要添加同一行的其他冒号?我以这种方式添加行d.addRow(新对象[]{Html.categoria,“Innizio scansione”,new JProgressBar()});是的,但是“d.addRow(新对象[]{Html.categoria,“Innizio scansione”,新的JProgressBar()})”;“不是手动添加progressbar吗?正如我在文章中所说的,您使用一个整数,如:d.addRow(newobject[]{Html.categoria,“Inalizio scansione”,0});渲染器负责其余部分,将“渲染器进度条”值设置为0或任何其他值。-1如果你仍想坚持错误,为什么你会一遍又一遍地问同样的问题?最后一次:做。不添加组件。到你的。模特儿-1-a)这不是实现渲染器的方式(每次访问一些外部列表以返回一个新的渲染组件),而是使用一个渲染器组件并使用参数给定的数据对其进行配置b)如果对表进行排序或筛选,查找将中断这是唯一有效的方法。。没人告诉我为什么需要0否则我的进度条
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;
        }
    }
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;
    }