1

DrJavaを使用してコンパイルする1.6.0_37 Javaを搭載した2010 Macを使用しています。revalidate メソッドがコンパイルされず、次のエラーが表示されます。

2 errors found:
File: /Users/#########/compsci/Final/ConnectFourFrame.java  [line: 123]
Error: /Users/#########/compsci/Final/ConnectFourFrame.java:123: cannot find symbol
symbol  : method revalidate()
location: class ConnectFourFrame

これはエラーを引き起こす方法です:

try 
{ 
  //display in window 
  updateTitleBar(); 
  ObjectInputStream ois = new ObjectInputStream(new FileInputStream(currentFile)); 
  colorGrid = (Color[][]) ois.readObject(); 
  makeGrid(); 
  for(int k = 0; k < 6; k++) 
  { 
    for(int l = 0; l < 7; l++) 
    { 
      if (colorGrid[k][l]==null) 
      { 
        grid[k][l] = new BlankTile(new Point(k, l)); 
      } 
      else if (colorGrid[k][l].equals(Color.red)) 
      { 
        grid[k][l] = new RedTile(new Point(k, l)); 
      } 
      else if (colorGrid[k][l].equals(Color.black)) 
      { 
        grid[k][l] = new BlackTile(new Point(k, l)); 
      }                              
    } 
  }                        
  putNewGrid(); 
  String currentColor = (String) ois.readObject(); 
  ois.close(); 
  ConnectFourFrame.this.repaint(); 
  ConnectFourFrame.this.revalidate();  //This is the offending line
  gp.revalidate(); 
  gp.repaint(); 
}

外側のクラスは ConnectFourFrame (JFrame を拡張し、Runnable を実装) です。

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

4

Component.revalidate()は Java 7 の新機能です。Mac では 6 ではなく、Windows では 7 を使用していると思われます。

コードを Java 6 で動作させる必要がある場合は、別の方法で行う必要があります。Component.revalidateのJavaDoc は言う

これは、アプリケーション開発者が検証ルートを手動で探すのを避けるのに役立つ便利な方法です。基本的には、最初invalidate()にこのコンポーネントでメソッドを呼び出し、次にvalidate()最も近い検証ルートでメソッドを呼び出すことと同じです。

aJFrame自体が検証ルートであるため、revalidate呼び出しinvalidate()validate().

于 2013-02-05T17:27:50.423 に答える
1
  1. try - catch - finally block内の GUI ステータスで管理しない(すべてのプログラム言語で有効)

  2. このフォーム (ここに投稿されたコード) で、Swing GUI の更新を中断する例外

  3. ois.close();に移動する必要がありますfinally block

  4. あなたの問題は、たとえばラインオーダーを切り替えJFrameて削除することです(re)revalidateConnectFourFrame.this.validate(); and then ConnectFourFrame.this.repaint();

  5. invalidateforを使用する理由はありません。このメソッドはすべて正しくJava versions > Java5実装されていますLayoutManagers API

  6. inがAPIJava7に追加されました。Java のマイナー バージョンに使用します。revalidate() for JFramevalidate()

于 2013-02-05T19:32:13.410 に答える