我有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;
}
i
和i1
为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
问题出在哪里?你能救我吗?
答案 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;
}