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

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

如何將窗戶拉到前面?

如何將窗戶拉到前面?

慕森王 2019-08-26 19:07:11
如何將窗戶拉到前面?當遠程控制機制激活應用程序中的某些內容時,我們需要將Java應用程序帶到前臺。為了得到這個,我們在類的被調用方法中實現了代表我們的應用程序的框架(a的擴展JFrame)在實現之后:setVisible(true);toFront();在Windows XP下,這在第一次調用時工作,第二次只有任務欄中的選項卡閃爍,框架不再出現在前面。Win2k也是如此。在Vista上似乎工作正常。你有什么想法?
查看完整描述

3 回答

?
肥皂起泡泡

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

可能的解決方案是:

java.awt.EventQueue.invokeLater(new Runnable() {
    @Override
    public void run() {
        myFrame.toFront();
        myFrame.repaint();
    }});


查看完整回答
反對 回復 2019-08-26
?
紅糖糍粑

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

Windows具有防止窗口竊取焦點的功能; 相反,它會閃爍任務欄圖標。在XP中它默認是打開的(我看到改變它的唯一地方是使用TweakUI,但在某處有一個注冊表設置)。在Vista中,他們可能已經更改了默認值和/或將其作為用戶可訪問的設置暴露在開箱即用的UI中。

從Windows 2K開始,防止窗戶強迫自己到前方并獲得焦點是一個特征(而且我,我很感激它)。

也就是說,我有一個小的Java應用程序,用來提醒我在工作時記錄我的活動,它每30分鐘就會成為活動窗口(當然可以配置)。它始終在Windows XP下始終如一,并且永遠不會閃爍標題欄窗口。它使用以下代碼,作為計時器事件觸發的結果在UI線程中調用:

if(getState()!=Frame.NORMAL) { setState(Frame.NORMAL); }toFront();repaint();

(如果最小化,第一行恢復......實際上如果最大化也會恢復它,但我從來沒有這樣做)。

雖然我通常將這個應用程序最小化,但通常它只是在我的文本編輯器后面。并且,就像我說的,它總是有效的。

我確實知道你的問題可能是什么 - 也許你有一個setVisible()調用的競爭條件。除非在調用窗口時實際顯示窗口,否則toFront()可能無效; 我之前遇到過requestFocus()這個問題。您可能需要在窗口激活事件的UI偵聽器中放置toFront()調用。

2014-09-07:在某個時間點上面的代碼停止工作,也許是在Java 6或7中。經過一些調查和實驗,我不得不更新代碼以覆蓋窗口的toFront方法做到這一點(結合修改后的代碼來自什么在上面):

setVisible(true);toFront();requestFocus();repaint();...public @Override void toFront() {
    int sta = super.getExtendedState() & ~JFrame.ICONIFIED & JFrame.NORMAL;

    super.setExtendedState(sta);
    super.setAlwaysOnTop(true);
    super.toFront();
    super.requestFocus();
    super.setAlwaysOnTop(false);}

從Java 8_20開始,這段代碼似乎運行正常。


查看完整回答
反對 回復 2019-08-26
  • 3 回答
  • 0 關注
  • 425 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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