(通用类).this.revalidate();在Mac上

时间:2013-02-05 16:37:40

标签: java macos swing

我正在使用带有1.6.0_37 Java的2010 Mac,使用DrJava进行编译。 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)

如何解决此问题?

2 个答案:

答案 0 :(得分:4)

Component.revalidate()是Java 7中的新功能。大概你在Windows上使用7而在Mac上使用6。

如果您需要使用代码来处理Java 6,那么您将不得不采取不同的方式。 JavaDoc for Component.revalidate

  

这是一种方便的方法,可以帮助应用程序开发人员避免手动查找验证根。基本上,它等同于首先在此组件上调用invalidate()方法,然后在最近的验证根上调用validate()方法。

由于JFrame本身就是验证根,因此您应该能够将revalidate来电替换为invalidate(),然后再加上validate()

答案 1 :(得分:1)

  1. 永远不会在try - catch - finally blo ck中管理GUI状态(对所有程序语言都有效)

  2. 以这种形式(您在此处发布的代码)任何异常中断Swing GUI的刷新

  3. ois.close();应移至finally block

  4. 您的问题是JFrame的切换行顺序,并从(re)移除revalidate,例如ConnectFourFrame.this.validate(); and then ConnectFourFrame.this.repaint();

  5. 没有理由对invalidate使用Java versions > Java5,此方法已在所有LayoutManagers API中正确实施

  6. Java7中的
  7. 在API中添加了revalidate() for JFrame,对于次要Java版本使用validate()