【问题标题】:Updating JLabel with different values in a real time plot在实时图中用不同的值更新 JLabel
【发布时间】:2013-03-09 22:59:33
【问题描述】:

我正在制作一个实时图表,其中包含通过串行通信传入的值。我有传入的数据,称为我的“摄氏度”值。我在 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 更改为华氏温度时,它会改变一秒钟,但随后会立即返回显示摄氏度,因为图形每秒更新一次,并且 actionPerformed 将立即返回调用 updateTempC()。当我按下 Fahr 的按钮时,我想知道怎么做。或 Cels.,它会在剩下的时间里改变。谢谢

【问题讨论】:

  • 请编辑您上面的帖子并重新发布格式正确的代码。很难阅读和理解所有左对齐的代码。如果您要求我们努力帮助您,请尽量不要让您的问题变得比应有的困难。您的解决方案背后的逻辑是不要让数据显示代码设置 JLabels,而只是让按钮更改 JLabels。
  • actionPerformed() 当新数据来自串行并且被称为按钮时被调用,或者它被你称为only @987654323 @?
  • @Java,我有 actionPerformed() 在新数据到来时被调用,并且此刻被按钮调用。

标签: java swing real-time jfreechart jlabel


【解决方案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();
    }
}

【讨论】:

  • 感谢@Java 的回复。效果很好。感谢您帮助我弄清楚这很烦人,而且解决这个问题似乎很简单,我只是无法解决这个问题。也感谢您让我知道该对象源变量。干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 2023-03-18
相关资源
最近更新 更多