亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 updateUiChanged() 事件之前捕獲

如何在 updateUiChanged() 事件之前捕獲

牛魔王的故事 2021-06-11 18:19:48
我的 Java Swing 應用程序使用 updateUiChanged() 在用戶調整其 jFrame 大小后調整字體大小。但是當 jFrame 最小化然后最大化時會觸發 updateUiChanged(),這會導致問題我試圖用以下方法捕獲最小化和最大化事件,但它們根本不執行,或者它們在為時已晚的 updateUiChanged() 之后執行。如何在 updateUiChanged() 之前捕獲最小化和最大化 請參閱下面的 updateUiChanged 實現。謝謝   private WindowListener wndMinMax;       wndMinMax = new WindowAdapter(){        public void windowIconified(WindowEvent e){            if(debug)debug("Window Iconfied!!");            return;        }        public void windowDeiconified(WindowEvent e){            if(debug)debug("Window DeIconfied!!");            return;        }    };    this.addWindowListener(wndMinMax);     addComponentListener(new ComponentAdapter()                         {                                                                       public void componentResized(ComponentEvent e) //V.43        {            if (e.getSource() instanceof JFrame) //V.43            {                updateUiChanged((int) e.getComponent().getWidth(),                        (int) e.getComponent().getHeight());                    }        }                                                               });
查看完整描述

1 回答

?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

您可以使用EventQueue.invokeLater來確保您的 updateUiChanged 調用發生在 WindowEvent 之后。您可以在私有實例字段中跟蹤 WindowEvent 的發生,因此延遲的 ComponentListener 代碼可以知道調整大小是否與 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()已經返回 int 值,因此不需要強制轉換為 int。)


查看完整回答
反對 回復 2021-06-23
  • 1 回答
  • 0 關注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號