1

我正在使用带有 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)

我该如何解决这个问题?

4

2 回答 2

4

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

如果您需要您的代码在 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. inJava7已添加revalidate() for JFrame到 API 中,validate()用于次要 Java 版本

于 2013-02-05T19:32:13.410 回答