2013-03-09 3 views
0

Я делаю график реального времени со значениями, которые поступают через последовательную связь. У меня есть данные, входящие в мою стоимость «Цельсия». Я показываю это в GUI в JLabel, поэтому значение постоянно меняется. Проблема, с которой я сталкиваюсь, - это иметь кнопки, которые могут изменить значение в JLabel до Fahrenheit или вернуться к Цельсию. Так что прямо сейчас у меня есть actionPerformed, вызывающий метод updateTemp(), чтобы он сразу же обновил JLabel, когда программа появилась. У меня есть код ниже для 3 методов, которые, как мне кажется, необходимо изменить.Обновление JLabel с разными значениями в графике реального времени

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(). Мне интересно, как, когда я нажимаю кнопку для Фэра. или Cels., он будет изменяться в остальное время. Чанки

+0

Пожалуйста, измените ваш пост выше, и повторно пост хорошо отформатированный код. Очень трудно читать и понимать все левые оправданные коды. Если вы просите нас приложить усилия, чтобы помочь вам, приложите немного усилий, чтобы не сделать ваш вопрос сложнее, чем должно быть. Логика вашего решения состоит в том, чтобы не отображать код отображения данных JLabels, а просто менять кнопки JLabels. –

+0

Вызывается 'actionPerformed()', когда новые данные поступают из последовательного _and_, называемого be button, или он называется _only_ вами 'JButtons'? – 2013-03-09 23:46:45

+0

@Java, я вызываю actionPerformed(), когда появляются новые данные, а также вызываемые кнопками на данный момент. – Patrick

ответ

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(); 
    } 
} 
+0

Благодарим за ответ @Java. Он отлично работал. Спасибо, что помогли мне понять, что это было довольно неприятно и казалось довольно простым решить эту проблему, которую я просто не мог обвести вокруг себя. Спасибо также за то, что сообщили мне об этой переменной источника Object. Приветствия – Patrick

+1

@Patrick Добро пожаловать. Я рад, что это помогло :) – 2013-03-10 20:19:46

Смежные вопросы