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

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

有個問題,請問有什么辦法可以防止窗體的重復實例化?

有個問題,請問有什么辦法可以防止窗體的重復實例化?

慕斯王 2022-05-27 15:11:14
我知道dispose()一個窗體后,setVisible(true)能夠將此窗體再次顯示出來,但是問題是: s etVisible(true)再次顯示窗體時,窗體的構造函數是否會被調用.如果不會被調用,那么有什么辦法可以強制調用?還有一個問題,有什么辦法可以防止窗體的重復實例化比如說我現在有個Button ,響應事件是new一個窗體,我要達到的效果是,如果再次點擊這個Button,如果這個窗體正在屏幕上顯示,則不實例新的,如果這個窗體已經被dispose(),則實例一個新的窗體. 注意:我的所有窗體都只有兩個狀態 未被dispose()的和被dispose()的,這里根本沒有setVisible()的事,請回答者不要把setVisible拿進來說,希望我說清楚問題了,謝謝! 回答的符合題意的,50分奉上;照搬API描述的,講這幾個方法的作用的 就不用回答了 謝謝
查看完整描述

2 回答

?
莫回無

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

這個問題很簡單 
1.首先 一個窗體 如果dispose()以后,如果,用窗體對象.setVisible(true);能夠顯示的話,
說明你沒設置窗體的默認關閉方式 。具體你可以看看 setDefaultCloseOperation();這個方法的API說明 。 如果,你沒有設置窗體關閉方式 。 點擊關閉窗體,或是程序調用dispose() 內部實現方式,都只是把窗體隱藏 == setVisible (false);

2. 構造方法,只能是通過 new 窗體對象來調用 。
引申上面的問題 。  如果你改變窗體默認關閉方式 手動設置 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
在窗體里 調用 dispose(); 就會完全關閉窗體 ,并釋放窗體資源 (不能通過setVisible重新顯示)

3. 這個很簡單 。  你考慮單利模式 就行了 。把窗體類做成單利模式 。
單利模式的意義就是 ,在程序的運行時,類實例只會存在一個。 也就是說,只要你沒釋放這個類資源 。 它只存在一個。 

私有構造方法。。
定義靜態內部實例。
提供公有靜態 創建并返回實例的方法
以下資料,可以掠過。 以下為 setDefaultCloseOperation ()方法API解釋。
-----------------------------------------------------------------------------------
DO_NOTHING_ON_CLOSE(在 WindowConstants 中定義):不執行任何操作;要求程序在已注冊的 WindowListener 對象的 windowClosing 方法中處理該操作。
HIDE_ON_CLOSE(在 WindowConstants 中定義):調用任意已注冊的 WindowListener 對象后自動隱藏該窗體。
DISPOSE_ON_CLOSE(在 WindowConstants 中定義):調用任意已注冊 WindowListener 的對象后自動隱藏并釋放該窗體。
EXIT_ON_CLOSE(在 JFrame 中定義):



查看完整回答
反對 回復 2022-05-30
?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

setVisible()可以重復調用!
不用那么麻煩,用JDialog就可以,利用JDialog對象的setModal(true)方法就可以達到你要的效果,而且你也不用考慮dispose,因為它非常好用

查看完整回答
反對 回復 2022-05-30
  • 2 回答
  • 0 關注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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