2017-01-23 69 views
0

我想使用jnativehook做一個熱鍵程序,但是當我按下按鍵(外部焦點)時,我無法改變說按鈕的顏色。關鍵新聞和一切工作正常,但我猜它需要某種形式的操作來「刷新」gui?更改jframe屬性而不執行操作?

目前,我只是有一個簡單的監聽器去每當按下F12鍵setstartbtn功能:

boolean s = false; 
public void nativeKeyPressed(NativeKeyEvent nke) {  
    if (nke.getKeyCode() == NativeKeyEvent.VC_F12){ 
     setstartbtn(); 

    } 
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
} 


    public void setstartbtn(){ 

      jButton1.setBackground(Color.red); 
      jstartlabel.setForeground(Color.red); 
      mainrot = false; 

} 

如果我給你2號功能,則它本身工作正常的按鈕。

這是相同的問題,例如,如果我有一個倒數計時器,當計時器從10到0,按鈕應該變成綠色,但它不,所以我猜它需要執行操作?

任何幫助,將不勝感激。

編輯:這裏是整個項目:https://www.dropbox.com/sh/lfqziqbvszfr2hs/AABlyJGlb_UvIljEBUwMrpRza?dl=0

+0

爲了儘快提供更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 –

+0

我會從一些調試語句開始,並確保你的方法實際上被調用的方式,你期望他們 – MadProgrammer

+0

是的,它被稱爲罰款,甚至步入setbackground,但不更新gui。重新驗證或重新繪製似乎也沒有做任何事情(單獨嘗試,並在按鈕本身)。 – Pengiuns

回答

0
public void setstartbtn(){ 

     jButton1.setBackground(Color.red); 
     jstartlabel.setForeground(Color.red); 
     mainrot = false; 
     revalidate(); 
     repaint(); 
} 

嘗試重繪()如果重新驗證不起作用。

+0

'setBackground'是一個綁定屬性,意思是它應該爲自己設置一個'repaint','revalidate'更多的是更新佈局,然後是其他任何東西。我建議從'System.out.println'開始,以確保方法已被調用,並且在攻擊'repaint'或'revalidate'之前驗證對象的實例與屏幕上的相同 - IMHO – MadProgrammer

+0

它是通過這種方法很好,甚至調試,它叫一切。我在主題中添加了完整的項目。 – Pengiuns

+0

我下載了你的項目,好像你需要jButton1.setOpaque(true);紅色背景是可見的。 (注意我只用鞦韆部件進行測試) – Andy