2012-04-08 41 views
1

基本的に私は単純なテキストエディタのJFrameを持っています。 作業中のファイル名がタイトルに表示されます。 私は、必要に応じてタイトルを変更するコードを設定しています。フォーカスが失われるまでJFrameのタイトルは変更されません

コードが呼び出された後に問題が発生するのは、JFrameのタイトルが変更されないことです。 getTitle()関数とすべてがタイトルが変更されたものとして表示されます。タイトルが実際に図形的に変化するJFrameに焦点を絞ったときだけです。

toBack()に続いてtoFront()が効果的にフォーカスを失うように強制された、すばやく汚い(非常にそう)修正がありました。これは非常に醜い方法でトリックを行います。

私はinvalidate()とvalidate()、さまざまなrepaint()呼び出し、setVisible(true)を試していますが、そのうちのどれもそのトリックを行いません。

私はいくつかの検索を行いましたが、解決策を見つけるように見えませんでしたが、小さなエラーですが迷惑なものです。誰かがいくつかの洞察力を持っていますか

ここで私は

private void() updateTitle() { 
    setTitle(((filename == null) ? "untitled" : filename) + ((unsaved) ? "*" : "")); 
    toBack(); 
    toFront(); 
} 

を使用して、これはすべてのJFrameを拡張するクラス内にあるコードです。

編集:EDTを拘束なしのループやスレッドか何かが存在しないことを言及

価値。ただ単純で単純なもの。すべてのリスナーを無効にして、これを試してデバッグします。 SetTitleはプログラムでは他には呼び出されていません。

それが判明:私はあるgetTitle()は、コンソールに結果印刷する場合はフォーカスがウィンドウ

EDIT2に失われるまで表示され、それは表示されるべきであることを私のタイトルを教えてくれますが、ではありませんそれは私のJDKの単なるエラーでした。 jdkを再インストールすると問題が解決しました。あなたを誤解して申し訳ありません、そしてあなたの応答に感謝します。

+2

を*「言及する価値..」*コードは言葉よりも雄弁に語っています。もっと早く助けを求めるには、[SSCCE](http://sscce.org/)を投稿してください。 –

+0

答えがある場合は、答えの左側にチェックマークを付けて受け入れます。タイトルをSOLVEDに変更しないでください。 – MByD

答えて

4

(ちょうどsetTitle()を呼び出す)この単純な例では、私の仕事:

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 

public class Frame2 
{ 
    public static void main(String[] args) 
    { 
     final JFrame frame = new JFrame(); 

     JButton button = new JButton("press me"); 
     button.addActionListener(new ActionListener() 
     { 

      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       frame.setTitle("New Title"); 
      } 

     }); 

     frame.setTitle("Title"); 
     frame.add(button); 
     frame.setSize(400, 400); 
     frame.setVisible(true); 
    } 
} 

一つのことをするように注意する:あなたはEvent Dispatch ThreadsetTitle()しばらく呼び出す必要があります。次のようにあなたの方法を調整

は助けることがあります。

private void() updateTitle() { 
    SwingUtilities.invokeLater(new Runnable() 
    { 
    @Override 
    public void run() 
    { 
     setTitle(((filename == null) ? "untitled" : filename) + ((unsaved) ? "*" : "")); 
    } 
    }); 
} 
関連する問題