📄 hvacpanel.java
字号:
package net.sf.dz.view.tcp.client;import java.awt.Color;import java.awt.Dimension;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Map;import java.util.Set;import java.util.StringTokenizer;import java.util.TreeMap;import javax.swing.BorderFactory;import javax.swing.JLabel;import javax.swing.JPanel;import net.sf.dz.util.chart.Chart;public class HvacPanel extends JPanel { private ClientDaemon daemon; private String unitName; private Chart hvacChart; private List chartList = new LinkedList(); private Chart signalChart; private List zoneData = new LinkedList(); public HvacPanel(ClientDaemon daemon, String unitName) { this.daemon = daemon; this.unitName = unitName; setBorder(BorderFactory.createTitledBorder("HVAC Controller")); GridBagLayout layout = new GridBagLayout(); GridBagConstraints cs = new GridBagConstraints(); setLayout(layout); cs.gridx = 0; cs.gridy = 0; cs.gridwidth = 1; cs.gridheight = 1; cs.weightx = 1; cs.weighty = 1; cs.fill = GridBagConstraints.BOTH; hvacChart = new Chart(); hvacChart.setBorder(BorderFactory.createTitledBorder("Unit Status")); hvacChart.setBackground(Color.black); hvacChart.setGridColor(Color.darkGray); hvacChart.setPreferredSize(new Dimension(100, 100)); List hvacLegend = new LinkedList(); hvacLegend.add("Mode"); hvacLegend.add("Demand"); hvacLegend.add("Stage"); hvacLegend.add("Speed"); hvacChart.setLegend(hvacLegend); Map hvacColors = new HashMap(); hvacColors.put("Mode", Color.green); hvacColors.put("Demand", Color.red); hvacColors.put("Stage", Color.yellow); hvacColors.put("Speed", Color.cyan); hvacChart.setChartColors(hvacColors); layout.setConstraints(hvacChart, cs); add(hvacChart); hvacChart.repaint(); cs.gridx++; signalChart = new Chart(); signalChart.setBorder(BorderFactory.createTitledBorder("Zone Signal")); signalChart.setBackground(Color.black); signalChart.setGridColor(Color.darkGray); signalChart.setPreferredSize(new Dimension(100, 100)); layout.setConstraints(signalChart, cs); add(signalChart); } public void setZones(Set zoneNameSet) { List colorList = new LinkedList(); colorList.add(Color.red); colorList.add(Color.yellow); colorList.add(Color.green); colorList.add(Color.cyan); colorList.add(Color.magenta); Map colorMap = new HashMap(); int idx = 0; List legend = new LinkedList(); for ( Iterator i = zoneNameSet.iterator(); i.hasNext(); ) { String name = i.next().toString(); legend.add(name); colorMap.put(name, colorList.get(idx++ % colorList.size())); } signalChart.setLegend(legend); signalChart.setChartColors(colorMap); signalChart.repaint(); } public void parse(StringTokenizer st) throws Throwable { String target = st.nextToken(); String value = st.nextToken(); if ( "mode".equals(target) ) { hvacChart.record("Mode", System.currentTimeMillis(), Double.parseDouble(value)); // An ugly fix, but required nevertheless daemon.parse("status:preferences:mode:" + value); } else if ( "stage".equals(target) ) { hvacChart.record("Stage", System.currentTimeMillis(), Double.parseDouble(value)); } else if ( "demand".equals(target) ) { hvacChart.record("Demand", System.currentTimeMillis(), Double.parseDouble(value)); } else if ( "fan".equals(target) ) { hvacChart.record("Speed", System.currentTimeMillis(), Double.parseDouble(value)); } else if ( "signal".equals(target) ) { String zone = value; String signalObject = st.nextToken(); if ( signalObject.startsWith("E") ) { String error = signalObject.substring(2); // VT: FIXME: I don't know what to do with it here... // Probably just leave it hanging } else { double signal = Double.parseDouble(signalObject.toString()); signalChart.record(zone, System.currentTimeMillis(), signal); } } else { throw new IllegalArgumentException("Unsupported target: '" + target + "'"); } } /* public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if ( source == modeSelector ) { int mode = modeSelector.getSelectedIndex() - 1; daemon.send("unit:" + unitName + ":ac:mode:" + mode); } } */ public void setHvacGraph(boolean enabled) { hvacChart.setVisible(enabled); checkVisible(); } public void setZoneGraph(boolean enabled) { signalChart.setVisible(enabled); checkVisible(); } private void checkVisible() { // If neither HVAC nor signal chart are visible, there's nothing to // display // VT: FIXME: It would be a smart thing to display a short HVAC mode // and status icon instead of a chart boolean hidden = !hvacChart.isVisible() && !signalChart.isVisible(); setVisible(!hidden); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -