/** * Copyright 2011-2013 Universite Joseph Fourier, LIG, ADELE team * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * AdeleTechHeatingApplication.java - 9 juil. 2013 */ package fr.imag.adele.apam.tutorials.temperature.adeletech.services; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.JTextField; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import fr.imag.adele.apam.tutorials.temperature.devices.Heater; import fr.imag.adele.apam.tutorials.temperature.devices.TemperatureSensor; /** * @author thibaud * */ public class AdeleTechHeatingApplication implements ChangeListener, ActionListener{ JFrame mainWindow; String myName; JLabel labelTemperature; JLabel labelHeater; JSlider userSetting; JTextField labelSetting; TemperatureSensor mySensor; Heater myHeater; public void start() { System.out.println("GenericHeatingApplication : " +myName+".start()"); mainWindow=new JFrame(myName); labelTemperature =new JLabel(); labelHeater = new JLabel(); labelSetting=new JTextField(); initComponents(); mainWindow.pack(); mainWindow.setVisible(true); } public void stop() { System.out.println("GenericHeatingApplication : " +myName+".stop()"); if(mainWindow != null) mainWindow.dispose(); mainWindow = null; } void initComponents() { mainWindow.setLayout(new BoxLayout(mainWindow.getContentPane(), BoxLayout.Y_AXIS)); JPanel panelSensor = new JPanel(); panelSensor.setBorder(BorderFactory.createTitledBorder("Temperature Sensor")); labelTemperature.setPreferredSize(new Dimension(200,30)); updateTemperature(); panelSensor.add(labelTemperature); JPanel panelUserSetting = new JPanel(); panelUserSetting.setBorder(BorderFactory.createTitledBorder("User Temperature Setting")); panelUserSetting.setLayout(new BoxLayout(panelUserSetting, BoxLayout.Y_AXIS)); userSetting = new JSlider(10,40,21); userSetting.addChangeListener(this); labelSetting.setEnabled(false); labelSetting.setText("21°C"); labelSetting.setHorizontalAlignment(JTextField.CENTER); panelUserSetting.add(labelSetting); panelUserSetting.add(userSetting); JPanel panelHeater = new JPanel(); panelHeater.setBorder(BorderFactory.createTitledBorder("Heater Activity")); labelHeater.setPreferredSize(new Dimension(200,30)); updateHeater(); panelHeater.add(labelHeater); JPanel panelTemp = new JPanel(); JButton refreshStatus = new JButton("Refresh Status"); refreshStatus.setPreferredSize(new Dimension(200,30)); refreshStatus.addActionListener(this); panelTemp.add(refreshStatus); mainWindow.add(panelSensor); mainWindow.add(panelUserSetting); mainWindow.add(panelHeater); mainWindow.add(panelTemp); } void updateTemperature() { if (mySensor!=null) labelTemperature.setText(mySensor.getCurrentTemperature()+"°C"); else labelTemperature.setText("No Temperature Sensor"); } void updateHeater() { if(myHeater!= null) { if (mySensor!=null) { if (mySensor.getCurrentTemperature()>=userSetting.getValue()) { System.out.println("Current temperature is too high, turning off the Heater"); myHeater.turnOff(); } else { System.out.println("Current temperature is too low, turning on the Heater"); myHeater.turnOn(); } } if(myHeater.getStatus()) labelHeater.setText("Heater is on"); else labelHeater.setText("Heater is off"); } else labelHeater.setText("No Heater"); } /* (non-Javadoc) * @see javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent) */ public void stateChanged(ChangeEvent e) { labelSetting.setText(userSetting.getValue()+"°C"); updateTemperature(); updateHeater(); } /* (non-Javadoc) * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ public void actionPerformed(ActionEvent e) { updateTemperature(); updateHeater(); } }