gpt4 book ai didi

java - JTable 在更改时加载值,在加载时显示进度条

转载 作者:行者123 更新时间:2023-11-30 07:26:55 25 4
gpt4 key购买 nike

所以我正在使用 JTable,它有 A-K 列。 AB 是唯一可编辑的。如果有人编辑了 A 中的空行,我会调用 API 来获取 B,然后调用数据库来获取 B 所在的所有行exists.If someone edits an empty row in B,我会进行相同的调用,因为将从该行的数据库中检索。该调用返回 0-N 行。如果返回 0 行,我将除 B 之外的所有行的值更改为 N/A,否则我使用数据填充行。填充后,我使所有列不可编辑。数据库调用发生在它自己的线程中,因为一旦调用返回,我就会创建自己的记录对象,并将其添加到表模型中。

我有自己的 TableModel 和一个 TableModelListener 来保存数据和处理值的变化。

这是我的问题。我正在使用 TableCellRenderer 并使用 cellrenderer 来查看值是否已更改,如果已更改,则我会进行调用并根据需要进行填充。当从数据库中提取大量行时,加载和制作所有记录需要一段时间,因此我尝试使用 ProgressBar 向用户显示屏幕不仅被卡住,它正在进步,进步了多少。但是出现的框架是空白的,没有显示任何内容。我觉得我做的事情要么不正确,要么遗漏了一些东西。非常感谢任何帮助。

一些代码来理解我在说什么

public class MyPanel extends JPanel {
private JTable myTable;
private MyTableModel tm;
//OTHER FIELDS

public static void createPanel() {
tm = new MyTableModel(columnnames);
myTable = new JTable(tm);

TableColumn account = myTable.getColumnModel().getColumn(
MyTableModel.ACCOUNT_INDEX);
account.setCellRenderer(new MyTableRenderer(
MyTableModel.ACCOUNT_INDEX));
}
}

public class MyTableRenderer extends DefaultTableCellRenderer{

protected int interactiveColumn;

public MyTableRenderer(int interactiveColumn) {
this.interactiveColumn = interactiveColumn;
}

public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
Component c = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
if (column == interactiveColumn && hasFocus) {
//DO DB and API CALLS HERE
//IF DB CALL DISPLAY A NEW FRAME WITH PROGRESSBAR
}
return c;
}
}

抱歉格式问题

最佳答案

使用SwingWorker ,它允许您在检查结果集时更新 TableModel

附录:不要尝试从渲染器更新 TableModel。您可以在 CellEditor 的实现结束时更新模型,方法是在 getCellEditorValue() 中启动合适的 worker。这样,当下一次为任何修改的单元格调用渲染器时,修改后的数据将可用。这个相关example概述了方法。

附录:getCellEditorValue() 在编辑结束后被调用,但是在 setValueAt() 中启动 worker 提供了对目标行和列的更可靠的访问。

关于java - JTable 在更改时加载值,在加载时显示进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10115564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com