好的,所以我一直在研究图形计算器很长一段时间,在项目的早期,我实现了一个有点健壮的窗口侦听器。或者我应该说我构建了一个强大的窗口侦听器来在窗口大小发生变化时处理更新局部变量。我基本上做的是这个......
/*
canvas, canvasWidth, canvasHeight and refreshGrid() are all local to this class
*/
private class resizeCatch extends Thread{
private boolean refreshOnStop = false;
public void run(){
while(true){
if(canvasWidth != canvas.getWidth() || canvasHeight != canvas.getHeight()){
canvasWidth = canvas.getWidth();
canvasHeight = canvas.getHeight();
refreshOnStop = true;
}else if(refreshOnStop && canvasWidth == canvas.getWidth() && canvasHeight == canvas.getHeight()){
refreshOnStop = false;
refreshGrid();
}
try{Thread.sleep(100);} catch(InterruptedException e) {}
}
}
}
Thread
我在实例化我的对象时开始此Plotter
操作,它所做的只是检查画布的大小并将其与它的内部变量进行比较。当有差异时更新变量,触发更新发生,当差异停止更新事物的图形方面并继续监听变化。
我知道这是一种常见的做法。
然而,我一直在概括我的Plotter
窗口,我让它更具可部署性,它不一定必须再管理它自己的窗口,这就是为什么我觉得是时候把这个讨厌的眼睛痛踢到路边了!然而,我仍然有何时刷新图形的问题......显而易见的答案是画布何时改变大小但我怎么知道?
理想情况下,隐藏在手册中的某个地方(哦,相信我,在过去的几个月里,我已经彻底阅读了手册......)有某种 WindowEventListener 或 ContainerListener 具有 ResizeEvent 或某种我不熟悉的口语行话. 但是我什么也找不到!
虽然在我的程序中嵌套无关Thread
类的想法与臭名昭著的while(true)做一些像重新调整组件大小这样平凡的事情让我很兴奋(NOT),但我必须找到某种替代方案。所以这让我回到了问题的根源。什么是倾听和触发对容器尺寸变化的响应的正确方法?如果没有正确的方法,你有哪些轻量级、可管理和合理的实践?
我已经能够忽略这一点将近半年了,当我接近我的程序完成时,这是我非常想摆脱的东西。请伸出援助之手:)