在Java中重置按钮

时间:2016-05-24 01:03:27

标签: java

我正在尝试为矩形网格创建重置按钮。运行它时,您可以单击矩形并将其变为蓝色 - 重置按钮应该将它们全部变回白色。我坚持在Lifeform中放入重置方法。它目前什么也没做。我感谢任何帮助!

类网格:

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();
    }
}

Class 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() {

    }

    }

2 个答案:

答案 0 :(得分:4)

当您点击Reset按钮时它没有做任何事情,因为重置(可能是Lifeform的reset()方法)被定义为什么都不做:该方法中没有代码。

答案 1 :(得分:1)

在Lifeform类的reset方法中,您可以对此进行编码:

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

在ResetListener类的actionPerformed方法中,您可以对此进行编码:

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。

之间的区别

在这种情况下,life boolean可能应该是Lifeform类中的一个字段。更具描述性的名称是isLife。