2013-12-10 3 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); 
    } 
} 

Edit (так как я не могу ответить из-за недостатка кармы):

@Makoto:

Это ошибки я получаю,

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

@Hovercraft Full Eels:

Я изменил для него петли но он дает мне те же ошибки.

+1

@PradeepSimha: Посмотрите еще раз. Есть методы. Код находится в методах. Это просто не сразу видно. – Makoto

+0

В коде нет ничего синтаксически неправильного. У вас есть сообщение об ошибке, которое вы получаете? Трудно понять, о чем вы говорите. – Makoto

+0

@Makoto: логическая ошибка в создании нового JPanel и присвоении его переменной for-each. –

ответ

0
  • Обратите внимание, что вы не можете создавать объекты в цикле for-each. Вместо этого используйте регулярный цикл. Причина в том, что каждый цикл скрывает свою фактическую истинную структуру, а истинная структура не позволяет создавать и назначать новые объекты из-за использования «невидимого» итератора, внутренней переменной цикла, в вашем цикле, Fy, является временной переменной, и вы не можете назначить ему новый объект и предположить, что она будет назначена массиву. В других словах это: Fy=new JPanel(); делает не назначает новый JPanel массиву, а скорее временную переменную. Единственный способ назначить массиву - использовать стандарт для цикла.
  • У вас никогда не должно быть таких ошибок, и наличие у них подсказывает, что ваш код неправильный. Если вам не разрешено использовать расширенную среду IDE, такую ​​как NetBeans или Eclipse, вы должны скомпилировать свой код рано и часто, и вы не должны добавлять новый код, пока весь текущий код не будет компилироваться без ошибок.
  • Рассмотрите возможность использования JTable вместо огромной сетки, которую вы используете.
3

Нужно ли вам так много JPanel? Вы создаете JPanel86400 раз (240x360).

Смежные вопросы