java 中带计时器的绘图仪
Graph plotter with timer in java
我正在研究一个绘图器,它从用户那里得到一个像 x^2 + t 这样的表达式,然后会向用户询问 x 和 t 的范围。
这里的 t 是定时器变量。
例如,在 x^2 + t 中,用户将为 x 选择 -10 到 10,为 t 选择 1 到 5。现在通过单击 GUI 程序中的绘图按钮,代码将从最小 t(此处为 1)开始绘制表达式,并且在每一秒(或任何时间段)之后将 t 值增加一个并使用新的 t(2 ,3 直到达到最大范围)。
如何让事件处理程序执行此操作?我找到了一种绘制多个图形的方法,但我不能延迟,所以从最小值到最大值。
我知道我应该使用计时器,但我不知道如何在这部分代码中使用
整个代码的Link
这是 plotter class 中应该更改的代码部分:
// Grapher
drawButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
String testSpring = null;
String tVarString = null;
for (int i = 0; i < 5; i++) {
testSpring = inputExpression;
tVarString = String.valueOf(i);
testSpring = testSpring.replaceAll("t", tVarString);
Equation equation = new Equation(testSpring);
graph.addEquation(equation);
}
}
catch (EquationSyntaxException e) {
e.printStackTrace();
}
}
});
这是节目的图片:
我的首要任务是通过单击绘图按钮制作程序 运行
但如果这个计时器可以影响 JSlider 会更好
所以 t 的最小值和最大值将是 Jslider 的最小值和最大值,并且通过单击绘制它将在每次滑块旋钮指向 t
的值时开始绘制
这将允许您定期设置回调,该回调在 EDT 的上下文中执行,从而可以安全地从
中更新 UI
public void actionPerformed(ActionEvent arg0) {
Timer timer = new Timer(1000, new ActionListener() {
private int iteration;
@Override
public void adtionPerformed(ActionEvent evt) {
try {
String testSpring = null;
String tVarString = null;
testSpring = inputExpression;
tVarString = String.valueOf(iteration);
testSpring = testSpring.replaceAll("t", tVarString);
Equation equation = new Equation(testSpring);
graph.addEquation(equation);
} catch (EquationSyntaxException e) {
e.printStackTrace();
} finally {
iteration++
if (iteration > 4) {
((Timer)evt.getSource()).stop();
}
}
}
});
timer.start();
}
});
我正在研究一个绘图器,它从用户那里得到一个像 x^2 + t 这样的表达式,然后会向用户询问 x 和 t 的范围。 这里的 t 是定时器变量。 例如,在 x^2 + t 中,用户将为 x 选择 -10 到 10,为 t 选择 1 到 5。现在通过单击 GUI 程序中的绘图按钮,代码将从最小 t(此处为 1)开始绘制表达式,并且在每一秒(或任何时间段)之后将 t 值增加一个并使用新的 t(2 ,3 直到达到最大范围)。 如何让事件处理程序执行此操作?我找到了一种绘制多个图形的方法,但我不能延迟,所以从最小值到最大值。 我知道我应该使用计时器,但我不知道如何在这部分代码中使用
整个代码的Link
这是 plotter class 中应该更改的代码部分:
// Grapher
drawButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
String testSpring = null;
String tVarString = null;
for (int i = 0; i < 5; i++) {
testSpring = inputExpression;
tVarString = String.valueOf(i);
testSpring = testSpring.replaceAll("t", tVarString);
Equation equation = new Equation(testSpring);
graph.addEquation(equation);
}
}
catch (EquationSyntaxException e) {
e.printStackTrace();
}
}
});
这是节目的图片:
我的首要任务是通过单击绘图按钮制作程序 运行 但如果这个计时器可以影响 JSlider 会更好 所以 t 的最小值和最大值将是 Jslider 的最小值和最大值,并且通过单击绘制它将在每次滑块旋钮指向 t
的值时开始绘制这将允许您定期设置回调,该回调在 EDT 的上下文中执行,从而可以安全地从
中更新 UI public void actionPerformed(ActionEvent arg0) {
Timer timer = new Timer(1000, new ActionListener() {
private int iteration;
@Override
public void adtionPerformed(ActionEvent evt) {
try {
String testSpring = null;
String tVarString = null;
testSpring = inputExpression;
tVarString = String.valueOf(iteration);
testSpring = testSpring.replaceAll("t", tVarString);
Equation equation = new Equation(testSpring);
graph.addEquation(equation);
} catch (EquationSyntaxException e) {
e.printStackTrace();
} finally {
iteration++
if (iteration > 4) {
((Timer)evt.getSource()).stop();
}
}
}
});
timer.start();
}
});