在实时绘图中使用不同的值更新JLabel

时间:2013-03-09 22:59:33

标签: java swing real-time jfreechart jlabel

我正在制作一个实时图表,其中包含通过串行通信传入的值。我有数据进入称为“摄氏”值。我在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。,它将在其余时间改变。感谢

1 个答案:

答案 0 :(得分:1)

你应该有一个像boolean fahrenheitTemp这样的变量。点击buttonF后,fahrenheitTemp将设置为true。点击buttonC后,fahrenheitTemp将设置为false。如果fahrenheitTemptrue,请致电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();
    }
}