如何在UpdateIChanged()事件之前捕获Java WindowIconnified()和WindowIdeConnified()?
在用户调整jFrame的大小后,我的Java Swing应用程序使用updateUiChanged()调整字体大小。但是当jFrame被最小化然后被最大化时,updateUiChanged()会被触发,这导致了问题 我试图用以下方法捕获最小化和最大化事件,但它们根本不执行,或者在updateIchiChanged()之后执行,这太晚了 在updateUiChanged()之前,如何捕获最小化和最大化 有关UpdateUI更改的实现,请参见下文。 谢谢 您可以使用以确保updateUiChanged调用在WindowEvent之后发生。您可以在私有实例字段中跟踪WindowEvent的发生情况,以便延迟的ComponentListener代码可以知道调整大小是否与WindowEvent配对:如何在UpdateIChanged()事件之前捕获Java WindowIconnified()和WindowIdeConnified()?,java,swing,Java,Swing,在用户调整jFrame的大小后,我的Java Swing应用程序使用updateUiChanged()调整字体大小。但是当jFrame被最小化然后被最大化时,updateUiChanged()会被触发,这导致了问题 我试图用以下方法捕获最小化和最大化事件,但它们根本不执行,或者在updateIchiChanged()之后执行,这太晚了 在updateUiChanged()之前,如何捕获最小化和最大化 有关UpdateUI更改的实现,请参见下文。 谢谢 您可以使用以确保updateUiChange
private boolean iconifyStateChanged;
// ...
wndMinMax = new WindowAdapter(){
public void windowIconified(WindowEvent e){
if(debug)debug("Window Iconfied!!");
iconifyStateChanged = true;
}
public void windowDeiconified(WindowEvent e){
if(debug)debug("Window DeIconfied!!");
iconifyStateChanged = true;
}
};
this.addWindowListener(wndMinMax);
addComponentListener(new ComponentAdapter()
{
public void componentResized(ComponentEvent e) //V.43
{
if (e.getSource() instanceof JFrame) //V.43
{
// This will run after any pending WindowEvents.
EventQueue.invokeLater(() -> {
if (!iconifyStateChanged)
{
updateUiChanged(e.getComponent().getWidth(),
e.getComponent().getHeight()));
}
iconifyStateChanged = false;
});
}
}
});
(并且已经返回int值,因此不需要强制转换为int。)使用ComponentListener侦听窗口大小的更改不是更容易吗?我正在使用ComponentListener来捕获调整大小(见下文)。问题是在iconfiy和deiconify事件之前执行。我不知道如何测试componentListener内部的IConify或deiconify。你…吗?
private boolean iconifyStateChanged;
// ...
wndMinMax = new WindowAdapter(){
public void windowIconified(WindowEvent e){
if(debug)debug("Window Iconfied!!");
iconifyStateChanged = true;
}
public void windowDeiconified(WindowEvent e){
if(debug)debug("Window DeIconfied!!");
iconifyStateChanged = true;
}
};
this.addWindowListener(wndMinMax);
addComponentListener(new ComponentAdapter()
{
public void componentResized(ComponentEvent e) //V.43
{
if (e.getSource() instanceof JFrame) //V.43
{
// This will run after any pending WindowEvents.
EventQueue.invokeLater(() -> {
if (!iconifyStateChanged)
{
updateUiChanged(e.getComponent().getWidth(),
e.getComponent().getHeight()));
}
iconifyStateChanged = false;
});
}
}
});