2013-12-10 217 views
-2

以下是在控制台中给了我很多错误,如果screen S使用new screen(10)进行初始化(您应该预先减小数组大小),那么会出现很多错误,为什么?这段java代码为什么会给我这么多错误?

import java.awt.*; 
import javax.swing.*; 
public class screen{ 
    JFrame window=new JFrame(); 
    JPanel scr=new JPanel(); 
    JPanel[][] pixels=new JPanel[240][360]; 
    screen(int scale){ 
     scr.setLayout(new GridLayout(240,360)); 
     int x=0; 
     for(JPanel Fx[]:pixels){ 
     for(JPanel Fy:Fx){ 
      Fy=new JPanel(); 
      if(x%3==0){Fy.setBackground(Color.red);} 
      if(x%3==1){Fy.setBackground(Color.green);} 
      if(x%3==2){Fy.setBackground(Color.blue);} 
      x++; 
      Fy.setPreferredSize(new Dimension(scale,scale)); 
      scr.add(Fy);}} 
     window.add(scr); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.pack(); 
     window.setResizable(false); 
     window.setVisible(true); 
    } 
    public static void main (String[] args){ 
     screen S=new screen(1); 
    } 
} 

编辑(因为我不能由于缺乏因果报应的回复):

@Makoto:

这是我得到的错误,

http://i.stack.imgur.com/O28f0.png

@Hovercraft Full Of Eels:

我已将for循环更改为它但是它给了我相同的错误。

+1

@PradeepSimha:再看一遍。有方法。代码在方法中。这只是不明显。 – Makoto

+0

你的代码没有任何合成错误。你有错误信息吗?仅凭这一点很难理解你在说什么。 – Makoto

+0

@Makoto:他创建一个新的JPanel并将其分配给for-each变量时存在逻辑错误。 –

回答

0
  • 请注意,您不能在for-each循环中创建对象。而是使用常规的for循环。原因在于for-each循环隐藏了其实际的真实结构,而真正的结构不允许新的对象创建和赋值,因为在循环中使用了“不可见”迭代器,内部循环变量Fy,是一个临时变量,您不能为它分配一个新对象,并假定它将被分配给该数组。换句话说:Fy=new JPanel();确实不是将一个新的JPanel赋值给该数组,而是赋给一个临时变量。分配给数组的唯一方法是使用标准for循环。
  • 你不应该有那么多的错误,让他们建议你的代码风格是错误的。如果您不允许使用NetBeans或Eclipse等高级IDE,那么您应该尽早且经常地编译代码,并且在所有当前代码无错误编译之前不应添加任何新代码。
  • 考虑使用JTable而不是您正在使用的巨大网格。
3

你真的需要这么多JPanel? 您创建JPanel86400次(240x360)。