我正在制作一个实时图表,其中包含通过串行通信传入的值。我有数据进入称为“摄氏”值。我在JLabel的GUI上显示它,因此值不断变化。我遇到的问题是我想要的按钮可以将JLabel中的值更改为华氏温度或更改为摄氏温度。所以现在,我让我的actionPerformed调用updateTemp()方法,这样当程序出现时它会立即更新JLabel。我有以下代码,我认为需要改变3种方法。
public void actionPerformed(final ActionEvent e) {
updateTempC();
final Double n = serial.x;
series.addOrUpdate(new Millisecond(), n);
Object source = e.getSource();
if (e.getSource() == buttonF){
degree.setText("degrees F");
updateTempF();
}
if (e.getSource() == buttonC){
degree.setText("degrees C");
updateTempC();
}
}
public void updateTempF(){
int step1;
int step2;
int step3;
String indata = serial.temp;
int temp = Integer.parseInt(indata);
step1 = temp*9;
step2 = step1/5;
step3 = step2 + 32;
String indata1 = Integer.toString(step3);
this.realtime.setText(indata1);
}
public void updateTempC(){
String indata = serial.temp;
this.realtime.setText(indata);
}
现在,当我按下JButton更改为Fahrenheit时,它会改变一秒钟,然后再返回显示Celsius,因为图形每秒更新一次,actionPerformed将直接返回调用updateTempC()。我想知道当我按下Fahr的按钮时。或Cels。,它将在其余时间改变。感谢
答案 0 :(得分:1)
你应该有一个像boolean fahrenheitTemp
这样的变量。点击buttonF
后,fahrenheitTemp
将设置为true
。点击buttonC
后,fahrenheitTemp
将设置为false
。如果fahrenheitTemp
为true
,请致电updateTempF()
,否则请致电updateTempC()
。 (另外,你有一个Object source
变量,但你永远不会使用它。)
尝试将actionPerformed(ActionEvent)
修改为以下内容:
boolean fahrenheitTemp = false;
public void actionPerformed(final ActionEvent e) {
if (fahrenheitTemp) {
updateTempF();
} else {
updateTempC();
}
final Double n = serial.x;
series.addOrUpdate(new Millisecond(), n);
Object source = e.getSource();
if (source == buttonF) {
degree.setText("degrees F");
fahrenheitTemp = true;
updateTempF();
} else if (source == buttonC) {
degree.setText("degrees C");
fahrenheitTemp = false;
updateTempC();
}
}