Java 如何使用重置按钮重置参数
我正在写一个程序,处理建造一座房子和重新安排邻居(类似于生活游戏) 它是用Java编写的,它作为一个重置按钮,用当前参数重新启动 问题是,当我单击Reset按钮时,整个窗口将关闭 您可以在问题的和处找到代码 这些是其他涉及的字段,因此您可以更好地理解代码:Java 如何使用重置按钮重置参数,java,swing,Java,Swing,我正在写一个程序,处理建造一座房子和重新安排邻居(类似于生活游戏) 它是用Java编写的,它作为一个重置按钮,用当前参数重新启动 问题是,当我单击Reset按钮时,整个窗口将关闭 您可以在问题的和处找到代码 这些是其他涉及的字段,因此您可以更好地理解代码: TextField设置城市的大小(边上的正方形数) TextFild设置住户在搬家前可以容忍的与您不同的邻居的最大百分比。也就是说,如果数字设置为70,那么一个有6个蓝色邻居的红房子将移动;一个有5个蓝色邻居的红色家庭就可以了 TextFi
- TextField设置城市的大小(边上的正方形数)
- TextFild设置住户在搬家前可以容忍的与您不同的邻居的最大百分比。也就是说,如果数字设置为70,那么一个有6个蓝色邻居的红房子将移动;一个有5个蓝色邻居的红色家庭就可以了
- TextField设置一个家庭在搬家前可以容忍的不喜欢你的邻居的最小百分比。对于喜欢多样性文本字段的人,将其设置为大于0,以设置红色家庭的百分比。注意:你可以用概率来做这件事。你不需要知道红色家庭的确切比例
- TextField设置蓝色家庭的百分比。剩下的将是白色。单步按钮给每个家庭一个移动的机会。你不必太在意这样一个事实,即当你在城市中前进时,一个人在移动的早期可能会移动到一个后来有机会的地方(即,一些家庭确实会有两次或更多的机会)
- Go按钮,用于启动和停止程序自行执行步骤
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链接程序的各个部分,并在情况发生变化时提供通知。对不起,我从来没有使用模型视图控件。我不知道这是怎么回事。请阅读链接。将程序的可视元素与非可视元素分开,非可视元素将成为模型并表示程序的状态,可视元素将以可视方式表示模型并可能更改模型的状态。模型需要根据您的需要提供状态更改通知,这将允许可视元素根据需要自行更新