2016-05-24 3 views
0

Я пытаюсь создать кнопку сброса для сетки прямоугольников. При его запуске вы сможете щелкнуть прямоугольники и повернуть их синим - кнопка сброса должна вернуть их обратно в белый цвет. Я застрял в том, что добавить метод сброса в Lifeform. В настоящее время он ничего не делает. Я ценю любую помощь!Кнопка сброса в Java

Класс Сетка:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Point; 
import java.awt.Rectangle; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.util.ArrayList; 

import javax.swing.JButton; 
import javax.swing.Timer; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Grid extends JPanel{ 

private int a = 50; 
private int b = 50; 
private Lifeform[][] Life; 
private Lifeform ife; 

private boolean[][] life = new boolean[a][b]; 
private Timer t; 
private JButton reset; 
private JButton run; 
private JPanel panel; 
Grid(){ 
    ife = new Lifeform(); 

    run = new JButton("Run"); 
    reset = new JButton("Reset"); 
    reset.addActionListener(new ResetListener()); 
//creates grid of rectangles 
    Life = new Lifeform[a][b]; 

    int ypos = 0; 
    for(int i = 0; i < Life.length; i++){ 
     int xpos = 0; 
     for(int j = 0; j < Life[0].length; j++){ 

      Rectangle r = new Lifeform(); 
      r.setBounds(xpos, ypos, 50, 50); 
      Life[i][j] = (Lifeform) r; 
      xpos += 50; 
     } 
     ypos += 50; 
    } 
    t = new Timer(64, new Movement()); 
    this.addMouseListener(new mouse()); 
} 

public void paintComponent(Graphics g){ 

    for(Lifeform[] n : Life){ 
     for(Lifeform lf : n){ 
      g.setColor(lf.getColor()); 
      g.fillRect((int)lf.getX(), (int)lf.getY(), (int)lf.getWidth(), (int)lf.getHeight()); 
     } 
    } 

    for (int i = 0; i <= 25; i++){ 
     g.drawLine(0, 50*i, 1500, 50*i); 
     g.setColor(Color.black); 
    } 
    for (int i = 0; i <= 25; i++){ 
     g.drawLine(50*i, 0, 50*i, 750); 
     g.setColor(Color.black); 
    } 
} 

private JFrame createGrid(){ 
    JPanel panel = new JPanel(); 
    JFrame frame = new JFrame("Alveolate"); 
    frame.add(run, BorderLayout.NORTH); 
    frame.add(panel, BorderLayout.CENTER); 
    frame.add(reset, BorderLayout.SOUTH); 
    frame.add(this); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(700,700); 
    frame.setVisible(true);  
    return frame; 
} 

public class mouse implements MouseListener{ 
//turns rectangles blue 
    public void mouseClicked(MouseEvent e) { 
     for(int i = 0; i < Life.length; i++){ 
      for(int j = 0; j < Life[i].length; j++){ 
       Lifeform spot = Life[i][j]; 

       if (spot.contains(e.getPoint())) { 
        Color b = Color.blue; 
        if(spot.getColor().equals(Color.blue)) { 
         b = Color.white; 
        } 
        spot.setColor(b); 
       } 
      } 
     } 

     repaint(); 
    } 

    public void mousePressed(MouseEvent e) {} 
    public void mouseReleased(MouseEvent e) {} 
    public void mouseEntered(MouseEvent e) {}  
    public void mouseExited(MouseEvent e) {} 

} 
public class Movement implements ActionListener{ 
    public void actionPerformed (ActionEvent e){ 

      }  
      updateUI(); 

     }     
     repaint(); 
    } 
} 
public void startTimer(){ 
    t.start(); 
} 

public void stopTimer(){ 
    t.stop(); 
} 
private class ResetListener implements ActionListener{ 
    public void actionPerformed(ActionEvent e) { 
     ife.reset(); 
     updateUI(); 
     } 
} 
public static void main(String[] args) { 

    Grid ABC = new Grid(); 
    ABC.createGrid(); 
    ABC.startTimer(); 
    } 
} 

Класс Lifeform:

import java.awt.Color; 
import java.awt.Rectangle; 

public class Lifeform extends Rectangle { 
    private Color c; 
    public Lifeform() { 
     c = Color.WHITE; 
    } 
    public Lifeform(int width){ 
     reset(); 
    } 
    public Color getColor() { 
     return c; 
    } 

    public boolean setColor(Color c) { 
     boolean rtn = false; 
     if(c != null) { 
      this.c = c; 
      rtn = true; 
     } 

     return rtn; 
    } 
    public void reset() { 

    } 

    } 

ответ

4

Это ничего не делать, когда вы нажмете на кнопку Reset, потому что (метод предположительно сброса() из Lifeform) сброса определяется как ничего не делать: в этом методе нет кода.

+0

Извините, я забыл упомянуть, что я застрял там. Что я могу сделать, чтобы заставить его работать? – macc88392

+1

@ macc88392 установить цвет обратно на белый? –

+0

@DavidConrad Да. Хотя это не было бы в методе сброса, верно? – macc88392

1

В методе сброса вашего класса Lifeform, вы код это:

public void reset() { 
    c = Color.WHITE; 
} 

В методе actionPerformed вашего класса ResetListener, вы код это:

public void actionPerformed(ActionEvent e) { 
    for(Lifeform[] n : Life) { 
     for(Lifeform lf : n) { 
      lf.reset(); 
     } 
    } 
    updateUI(); 
} 

И это, как вы сбросить все экземпляров Lifeform.

В классе сетки, вы закодированы:

private Lifeform[][] Life; 

и

private boolean[][] life = new boolean[a][b]; 

Никогда не дают два поля такое же имя, как это. Это смущает читателя вашего кода.

Все имена полей в Java должны начинаться с строчной буквы. Это поможет вам увидеть разницу между именем класса Lifeform и экземпляром класса lf.

В этом случае, вероятно, должно быть полем жизни в классе Lifeform. Более описательным именем будет isLife.

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