Oszilloskop aufgenommen
authorfelix <felix@a944a559-bf0e-0410-8ddc-85264b264b6c>
Tue, 15 May 2007 19:55:17 +0000 (19:55 +0000)
committerfelix <felix@a944a559-bf0e-0410-8ddc-85264b264b6c>
Tue, 15 May 2007 19:55:17 +0000 (19:55 +0000)
git-svn-id: https://www.internetallee.de/svn/bytewurf@24 a944a559-bf0e-0410-8ddc-85264b264b6c

projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/NetzdosenApplet.java
projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/Oszilloskop.java [new file with mode: 0644]

index 63a59a8..e03ea29 100644 (file)
@@ -42,6 +42,7 @@ public class NetzdosenApplet extends Applet {
                modePanel.add("Config", new ConfigPanel(netzdose));
                modePanel.add("LED", new NetzdosenLEDPanel(netzdose));
                modePanel.add("Commands", new CommandPanel(netzdose));
+               modePanel.add("Oszilloskop", new Oszilloskop(netzdose));
                JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
                splitPane.add(modePanel, JSplitPane.TOP);
 
diff --git a/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/Oszilloskop.java b/projekte/netzschalter/src/de/bytewurf/projekte/netzschalter/Oszilloskop.java
new file mode 100644 (file)
index 0000000..e1f2a6c
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Created on 15.05.2007
+ *
+ * To change this generated comment go to 
+ * Window>Preferences>Java>Code Generation>Code Template
+ */
+package de.bytewurf.projekte.netzschalter;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.geom.Line2D;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+
+/**
+ * @author felix
+ */
+public class Oszilloskop extends JPanel {
+
+       Netzdose netzdose;
+
+       int[] data;
+
+       int min;
+
+       int max;
+
+       public Oszilloskop(Netzdose netzdose) {
+               this.netzdose = netzdose;
+               data = new int[] { -20, 1, 30, 10, 20, 25, 10, 2 };
+               this.setPreferredSize(new Dimension(200, 100));
+               this.setBorder(BorderFactory.createLoweredBevelBorder());
+               repaint();
+       }
+
+       public void paintComponent(Graphics g2) {
+               super.paintComponent(g2);
+               Graphics2D g = (Graphics2D) g2;
+               Dimension size = getSize();
+               int border_x = 10;
+               int border_y = 10;
+
+               setBackground(Color.black);
+               g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+                               RenderingHints.VALUE_ANTIALIAS_ON);
+               g.setPaint(Color.red);
+               g.drawRect(border_x, border_y, (int) size.getWidth() - 2 * border_x,
+                               (int) size.getHeight() - 2 * border_y);
+
+               if (data != null) {
+                       if (min == max) {
+                               min = getMin();
+                               max = getMax();
+                       }
+                       LogMediator.getInstance().log("Min: " + min + " Max: " + max);
+
+                       double factor_x = (size.getWidth() - border_x * 2.0) / data.length;
+                       double factor_y = (size.getHeight() - border_y * 2.0) / (max - min);
+
+                       g.setPaint(Color.green);
+                       int old_y = size.height
+                                       - ((int) ((data[0] - min) * factor_y + border_y));
+                       int old_x = border_x;
+                       for (int i = 0; i < data.length; i++) {
+
+                               int x = (int) (border_x + i * factor_x);
+                               int y = size.height
+                                               - ((int) ((data[i] - min) * factor_y + border_y));
+                               g.draw(new Line2D.Double(old_x, old_y, x, y));
+                               old_x = x;
+                               old_y = y;
+                       }
+
+               }
+               g.setPaint(Color.black);
+       }
+
+       private int getMax() {
+               int result = Integer.MIN_VALUE;
+               for (int i = 0; i < data.length; i++)
+                       if (data[i] > result)
+                               result = data[i];
+               return result;
+       }
+
+       private int getMin() {
+               int result = Integer.MAX_VALUE;
+               for (int i = 0; i < data.length; i++)
+                       if (data[i] < result)
+                               result = data[i];
+               return result;
+       }
+
+       public void setData(int[] data) {
+               this.data = data;
+               min = 0;
+               max = 0;
+               repaint();
+       }
+
+}