2015-04-08 3 views
0

Я беру курс по программированию GUI. Мне трудно понять, как использовать перерисовку моего класса Box для другого цвета. Вот мой GUI класс:Как перерисовать на Java

public class Box extends JPanel { 

    private Color color; 
    private int boxNumber; 


    public Box(Color color, int boxNumber){ 
     this.boxNumber = boxNumber; 
     this.color = color; 
    } 

    public void changeColor(){ 
     setBackgroundColor(Color.WHITE); 
     repaint(); 
    } 

    protected void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     setBackground(color); 
    } 
} 

Вот где я добавляю его в Frame:

public class MainHeader { 

    Box box[]; 
    public MainHeader(){ 

    } 

    private void setBox(){ 

     box = new Box[4]; 
     Color color[] = {Color.RED, Color.YELLOW, Color.BLUE, Color.ORANGE}; 

     for(int i = 0; i < color.length; i ++){ 
      box[i] = new Box(color[i],i); 
     } 
    } 

    private void gui(){ 
     JFrame f = new JFrame(); 
     f.setLayout(new GridLayout(2,2,1,1)); 
     setBox(); 
     for(Box b : box) 
      f.add(b); 
     f.setSize(500,500); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setResizable(false); 
     f.setVisible(true); 
    } 
} 
+0

Похоже, что вам нужно кормить ящик [] массив в конструкторе вы создали в вашем другом классе. – ryekayo

ответ

2

Во-первых, вам не нужно делать это ...

protected void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    setBackground(color); 
} 

Вы никогда не хотите изменять состояние ЛЮБОГО компонента из ЛЮБОГО метода рисования, это просто не вызовет никаких проблем и может привести вашу программу на колени, поскольку она потребляет циклы процессора ...

Во-вторых, ваш конструктор класса Box никогда не устанавливает цвет фона Box. Вы на самом деле не нужно, чтобы сохранить ссылку на значение цвета, как Box, через это inheriancy, уже поддерживает эту функциональность

public Box(Color color, int boxNumber){ 
    this.boxNumber = boxNumber; 
    setBackground(color); 
}