好的,所以我从事图形计算器已经有一段时间了,在项目的早期,我实现了一个健壮的窗口侦听器。或者我应该说我构建了一个健壮的窗口侦听器,以在窗口大小更改时处理更新的局部变量。我基本上是这样做的...
/*
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)却在做一些像平常的事情一样肮脏的工作,例如重新调整组件的大小,这使我不满意(不是),但我必须找到某种替代方法。因此,这使我回到了问题的根源。侦听并触发对容器尺寸变化的响应的正确方法是什么?如果没有正确的方法,您将哪些轻便,可管理和合理的实践组合在一起?
现在已经有将近半年的时间了,我已经可以忽略它了。当我接近程序完成时,这是我迫切希望摆脱的事情。请伸出援助之手:)
好吧,MadProgrammer这么大的帽子提示ComponentListener
给我指出了。在花费一些时间的同时,完美地工作了,正是我想要的。我知道这个问题使很多人感到困惑,所以我将比大多数教程更加冗长,并解释一些集成ComponentListener以便调整窗口大小的简单步骤。
第一步:导入正确的库
import java.awt.event.ComponentListener;
import java.awt.event.ComponentEvent;
第二步:实现类的侦听器
public class Plotter extends GCanvas implements ComponentListener{
第三步:将您Object
的内容添加到ComponentListener
this.addComponentListener(this);
第四步:覆盖以下方法
public void componentResized(ComponentEvent e){
//do whatever you want upon size change
}
public void componentHidden(ComponentEvent e){
//do whatever you want upon visibility change
}
public void componentMoved(ComponentEvent e){
//do whatever you want upon location change
}
public void componentShown(ComponentEvent e){
//do whatever you want upon visibility change
}
就是这样。这些工具到位后,您就可以从事业务了!享受 :)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句