1 回答

TA貢獻1804條經(jīng)驗 獲得超7個贊
您可以使用EventQueue.invokeLater來確保您的 updateUiChanged 調(diào)用發(fā)生在 WindowEvent 之后。您可以在私有實例字段中跟蹤 WindowEvent 的發(fā)生,因此延遲的 ComponentListener 代碼可以知道調(diào)整大小是否與 WindowEvent 配對:
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;
});
}
}
});
(getWidth()和getHeight()已經(jīng)返回 int 值,因此不需要強制轉(zhuǎn)換為 int。)
添加回答
舉報