2013-12-10 212 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)。