Java 如何使用重置按钮重置参数

Java 如何使用重置按钮重置参数,java,swing,Java,Swing,我正在写一个程序,处理建造一座房子和重新安排邻居(类似于生活游戏) 它是用Java编写的,它作为一个重置按钮,用当前参数重新启动 问题是,当我单击Reset按钮时,整个窗口将关闭 您可以在问题的和处找到代码 这些是其他涉及的字段,因此您可以更好地理解代码: TextField设置城市的大小(边上的正方形数) TextFild设置住户在搬家前可以容忍的与您不同的邻居的最大百分比。也就是说,如果数字设置为70,那么一个有6个蓝色邻居的红房子将移动;一个有5个蓝色邻居的红色家庭就可以了 TextFi

我正在写一个程序,处理建造一座房子和重新安排邻居(类似于生活游戏)

它是用Java编写的,它作为一个重置按钮,用当前参数重新启动

问题是,当我单击Reset按钮时,整个窗口将关闭

您可以在问题的和处找到代码

这些是其他涉及的字段,因此您可以更好地理解代码:

  • TextField设置城市的大小(边上的正方形数)

  • TextFild设置住户在搬家前可以容忍的与您不同的邻居的最大百分比。也就是说,如果数字设置为70,那么一个有6个蓝色邻居的红房子将移动;一个有5个蓝色邻居的红色家庭就可以了

  • TextField设置一个家庭在搬家前可以容忍的不喜欢你的邻居的最小百分比。对于喜欢多样性文本字段的人,将其设置为大于0,以设置红色家庭的百分比。注意:你可以用概率来做这件事。你不需要知道红色家庭的确切比例

  • TextField设置蓝色家庭的百分比。剩下的将是白色。单步按钮给每个家庭一个移动的机会。你不必太在意这样一个事实,即当你在城市中前进时,一个人在移动的早期可能会移动到一个后来有机会的地方(即,一些家庭确实会有两次或更多的机会)

  • Go按钮,用于启动和停止程序自行执行步骤

所以我的问题是如何让这些字段和按钮以当前参数重新启动(在玩了几次之后以我原来的参数重新启动)

正如你所看到的,我添加了reset按钮来完成它的工作,但不知为什么它不是

好的,就像我运行程序一样,我有一组红色和蓝色的数字,你可以在我的中看到,然后当我运行它时,它从这些数字开始。所以我在玩的过程中不断地改变,然后有一个重置按钮,可以让我重置我做过的事情,并且应该恢复到最初的状态:

public final static int size = 5 and so on
这是我的主要节目

public class Ghetto extends JFrame implements ActionListener,  MouseListener,MouseMotionListener 
   {

protected Grids theGrid;
JButton resetButton;
javax.swing.Timer timer; // generates ticks that drive the animation

public final static int SIZE = 5;
public final static int BLUE = 10;
public final static int RED = 8;
public final static int DIVERSITY_PERCENTAGE = 70;

public static void main(String[] args) 
{
    new Ghetto();

}

public Ghetto() {
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    addMouseListener(this);
    addMouseMotionListener(this);
    setLayout(new FlowLayout());

    theGrid = new Grids(SIZE, BLUE, RED, DIVERSITY_PERCENTAGE);
    add(theGrid);

    resetButton = new JButton("Reset");
    add(resetButton);
    resetButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            resetWithCurrent();
        }
    });


    setSize(new Dimension(550, 600));
    setVisible(true);
}



public void resetWithCurrent()
{
    //this.dispose();
}

@Override
public void actionPerformed(ActionEvent e) 
{
    timer.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e) 
        {
            performStep();

                            //if (e.getSource() == resetButton )
                            //{
            //resetWithCurrent();
                            //}
        }
    });

}
}
我还添加了这一部分

    public class Observable{

    int state = 0;
    int additionalState = 0;
    public final void updateState(int increment)
    {
        doUpdateState(increment);
        notifyObservers();
    }
    private void notifyObservers() {
        // TODO Auto-generated method stub

    }
    public void doUpdateState(int increment)
    {
        state = state + increment;      
    }

}
public class ConcreteObservable extends Observable{

public void doUpdateState(int increment){
        super.doUpdateState(increment); // the observers are notified
        additionalState = additionalState + increment; // the state is     changed after the notifiers are updated
    }

}

但这没什么区别

一个简单的方法是设计一个模型,该模型保持游戏状态,允许视图更新自身以表示模型。当你想重新设置游戏时,你只需创建一个新的模型并应用它,允许视图进行更改。我不确定我是否理解你所说的,如果你不介意用代码编写它,它会更有意义。谢谢。基本上,我说的是使用and链接程序的各个部分,并在情况发生变化时提供通知。对不起,我从来没有使用模型视图控件。我不知道这是怎么回事。请阅读链接。将程序的可视元素与非可视元素分开,非可视元素将成为模型并表示程序的状态,可视元素将以可视方式表示模型并可能更改模型的状态。模型需要根据您的需要提供状态更改通知,这将允许可视元素根据需要自行更新