2017-01-23 5 views
0

私はjnativehookを使用してホットキープログラムを作ろうとしていますが、キーを押したときにボタンの色を変更できません。キーを押すとすべて正常に動作しますが、私はguiをリフレッシュするために何らかのアクションを実行する必要があると推測しています。アクションなしでjframe属性を変更していますか?

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; 

} 

私はボタン自体への第二の機能を割り当てた場合、それは正常に動作します:私はちょうどF12が押されるたびに機能をsetstartbtnに行く簡単なリスナーを持っている瞬間

カウントダウンタイマーがある場合、タイマーが10から0に達すると、ボタンは緑色に変わりますが、それは実行される必要があると推測しているのと同じ問題です。

ご協力いただければ幸いです。

EDIT:再検証が動作しない場合https://www.dropbox.com/sh/lfqziqbvszfr2hs/AABlyJGlb_UvIljEBUwMrpRza?dl=0

+0

より良いヘルプを早く得るには、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 –

+0

私はいくつかのデバッグステートメントから始めて、実際にあなたのメソッドが期待どおりに呼び出されていることを確認したいと思います。 – MadProgrammer

+0

ええと、setbackgroundにステップを入れてもうまく呼び出されますが、GUIは更新されません。 revalidateまたはrepaintは何もしていないようでした(単独でそれを試しました、そしてボタン自体で)。 – Pengiuns

答えて

0
public void setstartbtn(){ 

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

)が(再描画してみてください。ここでの完全なプロジェクトです。

+0

'setBackground'はバウンドプロパティーです。つまり、' revalidate'はレイアウトの更新と関係があります。メソッドが呼び出されたことを確認し、 'repaint'や' revalidate'を攻撃する前にオブジェクトのインスタンスが画面上のものと同じであることを確認するために、 'System.out.println'から始めることをお勧めします - IMHO – MadProgrammer

+0

その方法をうまくやって、デバッグしても、すべてを呼びました。私はメインのトピックにフルプロジェクトを追加しました。 – Pengiuns

+0

プロジェクトをダウンロードしました.jButton1.setOpaque(true)が必要です。赤い背景が見えるようにします。 (私はスイングコンポーネントだけでテストしました) – Andy

関連する問題