gpt4 book ai didi

java - 如何防止 TableModel 触发表更改事件?

转载 作者:行者123 更新时间:2023-12-01 12:06:42 25 4
gpt4 key购买 nike

注意:这适用于绘图工具应用程序

我目前的 JTable 具有 tableChanged() 事件。

coFigureTable[i].getModel().addTableModelListener(
new TableModelListener()
{
public void tableChanged(TableModelEvent e)
{
coCanvas.userSetCoords(figIndex, angle, row, column);
}
}

该表包含 x 和 y 坐标以及图形的角度。用户可以手动更改这些值。当coFigureTable中的角度值发生变化时,Canvas中的图形将会旋转。但是,当发生旋转时,表中的所有坐标也必须更新,这发生在 userSetCoords 函数中。因此,我为表调用 repaint() 来更新值。这会触发一个表更改事件,从而导致图形的移动等。因此,无限循环。

一旦已经完成一次,如何防止调用表更改?或者是否有其他事件或算法可以解决这个问题?

最佳答案

您应该在更新内容时设置一个标志,以便您的 TableModelListener知道忽略该事件。

boolean isUpdatingUI = false;

void initialise(){
coFigureTable[i].getModel().addTableModelListener(
new TableModelListener(){
public void tableChanged(TableModelEvent e) {
if(!isUpdatingUI)
coCanvas.userSetCoords(figIndex, angle, row, column);
}
}
}

public void doUpdate(){
isUpdatingUI = true;
coFigureTable[i].getModel().setValue( ..... ); // update table
isUpdatingUI = false;
}

旗帜应该是类(class)成员。

PS,在 paint 方法中更新数据不是一个好主意。

虽然理想情况下更新应该发生在 GUI 线程中,这样如果用户同时更改表,界面编辑就不会被忽略。

关于java - 如何防止 TableModel 触发表更改事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27537923/

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