我正在编写一个程序来处理创建房屋和重新安排邻居(类似于生活游戏)
它是用Java编写的,它是一个重置按钮,用当前参数重新启动。
问题是当我点击resetButton时整个窗口关闭。
您可以在问题和问题中找到代码。
这些是其他涉及的字段,因此您可以更好地理解代码:
TextField设置城市的大小(边缘上的方格数)。
TextFild设置邻居的最大百分比,而不是像家人在移动前所能容忍的那样。即,如果数字设置为70,则有6个蓝色邻居的红房子会移动;据此,一个有5个蓝色邻居的红色家庭可以。
TextField设置一个最小百分比的邻居,而不是像家人在搬家前所能容忍的那样。对于喜欢多样化TextField以设置红色家庭百分比的人来说,大于0。注意:您可以通过概率执行此操作。您不需要具有此确切百分比的红色家庭。
TextField设置蓝色家庭的百分比。白色将是剩下的东西。单步按钮为每个家庭提供一次移动的机会。你不需要小心这个事实,当你在城市中前进时,一个人在移动的机会可能会移动到一个后来有机会的地方(即一些家庭真的得到两个或更多的转弯)。
转到按钮,启动和停止程序自行执行步骤。
所以我的问题是我如何让这些字段和按钮重新启动当前参数(在播放几次之后重新启动它)
正如你所看到的,我添加了resetButton来完成它的工作但不知道它不是。
好吧,就像我运行程序一样,我有一组红色和蓝色的数字,你可以在我看到,然后当我运行它时,它从这些数字开始。所以我继续改变,因为我玩,然后有一个重置按钮,让我重置我做的,并应该带回原来开始:
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
}
}
但它没有任何区别。