我有一个jtable,根据模型中的值重新着色行,类似于这样:
resultTable = new javax.swing.JTable(){
private Border outside = new MatteBorder(1, 0, 1, 0, Color.BLACK);
private Border inside = new EmptyBorder(0, 1, 0, 1);
private Border highlight = new CompoundBorder(outside, inside);
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
JComponent jc = (JComponent) c;
// Color row based on a cell value
if (!isRowSelected(row)) {
c.setBackground(getBackground());
int modelRow = convertRowIndexToModel(row);
if (getStatus().equals("status1")) {
myFirstTableModel model = (myFirstTableModel ) resultTable.getModel();
if ((model.getObjectAtRow(modelRow).getMsg().getRegNumIn() == 3)) {
c.setBackground(new Color(255, 244, 148));//YELLOW - needs attension
}
} else if (getStatus().equals("status2")) {
mySecondTableModel model = (mySecondTableModel) resultTable.getModel();
if (model.getObjectAtRow(modelRow).getMsg().getTask() == 2) {
c.setBackground(new Color(210, 245, 176));//GREEN - got attension
}
}
} else if (isRowSelected(row)) {
jc.setBorder(highlight);
c.setBackground(new Color(201, 204, 196));
}
return c;
}
};
在 SwingWorker 线程中,我根据变量 status 将不同的模型设置到我的表格(myFirstTableModel,mySecondTableModel)中,并显示带有“请稍候”的模态对话框。
final WaitDialog dialog = new WaitDialog(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
});
SwingWorker worker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
setStatus("status2");
Refresh();
return 0;
}
@Override
public void done() {
dialog.dispose();
}
};
worker.execute();
dialog.setVisible(true);
在Refresh()方法中更改模型:
if (getMainFrameStatus().equals("status2")) {
@Override
public void run() {
//Update the model here
resultTable.setModel(new mySecondTableModel(data));
}
});
但是我认为当等待对话框
遮挡我的表格时,会调用prepareRenderer
。但是不同的模型还没有被应用。
很明显,我得到了:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: myFirstTableModel cannot be cast to mySecondTableModel at mySecondTableModel model = (mySecondTableModel) resultTable.getModel();
我能让表格调用prepareRenderer
吗?该如何使这个混乱的工作正确运行?
Refresh()
方法不易理解,请改进。 - Kowser