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