我有一个JTable。在其中,我重写prepareRenderer函数。我描述了我的应用程序,并得到了以下结果:
(对不起,这可能是小阅读)。这是第一线。关键是,我在该功能上花费了大量时间,并且它阻止了我的UI。通过条形图可以看到比整个应用程序的任何其他功能更多的时间。我不太确定如何将我的代码从EDT中删除。
它真正做的就是确定要绘制组件的颜色。我不认为这是耗时的。这让我相信它被调用的次数。我可能错了。
我知道SwingWorker
,但我的问题围绕着这样一个事实,即我对他们的印象很大,这个功能的大部分应该在EDT上。
有人可以协助我让这个功能停止阻止吗?
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component returnComp = super.prepareRenderer(renderer, row, column);
Color alternateColor = ColorRepository.Table.ALTERNATE_ROW_COLOR;
Color lightGray = ColorRepository.Table.ROW_COLOR;
if (!returnComp.getBackground().equals(getSelectionBackground())) {
if (columnColors.containsKey(column) && requiredColumn.containsKey(column) == false) {
returnComp.setBackground(columnColors.get(column));
} else if (requiredColumn.containsKey(column) && getValueAt(row, column) == null) {
returnComp.setBackground(requiredColumn.get(column));
} else if (shouldModifyColumn.containsKey(column) && getValueAt(row, column).equals(shouldModifyColumn.get(column))) {
returnComp.setBackground(shouldModifyColumnColor.get(column));
} else {
Color bg = (row % 2 == 0 ? alternateColor : lightGray);
returnComp.setBackground(bg);
}
}
if (!returnComp.getForeground().equals(getSelectionForeground())) {
if (canModifyColumnColors.containsKey(column) && returnComp instanceof DefaultTableCellRenderer) {
returnComp.setForeground(canModifyColumnColors.get(column));
} else {
returnComp.setForeground(Color.BLACK);
}
}
if (moneyColumn.containsKey(column) && returnComp instanceof DefaultTableCellRenderer) {
DefaultTableCellRenderer cellRenderer = (DefaultTableCellRenderer) renderer;
cellRenderer.setText(Formatter.setDigitsOfPerceision(cellRenderer.getText(), moneyColumn.get(column)));
}
if (percentColumn.containsKey(column) && returnComp instanceof DefaultTableCellRenderer) {
DefaultTableCellRenderer cellRenderer = (DefaultTableCellRenderer) renderer;
cellRenderer.setText(Formatter.setDigitsOfPerceision(cellRenderer.getText(), percentColumn.get(column)));
}
if (toolTip.containsKey(column) && returnComp instanceof JComponent) {
((JComponent) returnComp).setToolTipText(toolTip.get(column));
}
return returnComp;
}