summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/examples/Segment7.java
diff options
context:
space:
mode:
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/examples/Segment7.java')
-rw-r--r--Master/Reference Architectures and Patterns/hjp5/examples/Segment7.java170
1 files changed, 170 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/examples/Segment7.java b/Master/Reference Architectures and Patterns/hjp5/examples/Segment7.java
new file mode 100644
index 0000000..8306cd5
--- /dev/null
+++ b/Master/Reference Architectures and Patterns/hjp5/examples/Segment7.java
@@ -0,0 +1,170 @@
+/* Segment7.java */
+
+import java.awt.*;
+import java.awt.event.*;
+
+class Segment7
+extends Canvas
+{
+ private int digit;
+ private boolean hasfocus;
+ private int[][] polysx = {
+ { 1, 2, 8, 9, 8, 2}, //Segment 0
+ { 9,10,10, 9, 8, 8}, //Segment 1
+ { 9,10,10, 9, 8, 8}, //Segment 2
+ { 1, 2, 8, 9, 8, 2}, //Segment 3
+ { 1, 2, 2, 1, 0, 0}, //Segment 4
+ { 1, 2, 2, 1, 0, 0}, //Segment 5
+ { 1, 2, 8, 9, 8, 2}, //Segment 6
+ };
+ private int[][] polysy = {
+ { 1, 0, 0, 1, 2, 2}, //Segment 0
+ { 1, 2, 8, 9, 8, 2}, //Segment 1
+ { 9,10,16,17,16,10}, //Segment 2
+ {17,16,16,17,18,18}, //Segment 3
+ { 9,10,16,17,16,10}, //Segment 4
+ { 1, 2, 8, 9, 8, 2}, //Segment 5
+ { 9, 8, 8, 9,10,10}, //Segment 6
+ };
+ private int[][] digits = {
+ {1,1,1,1,1,1,0}, //Ziffer 0
+ {0,1,1,0,0,0,0}, //Ziffer 1
+ {1,1,0,1,1,0,1}, //Ziffer 2
+ {1,1,1,1,0,0,1}, //Ziffer 3
+ {0,1,1,0,0,1,1}, //Ziffer 4
+ {1,0,1,1,0,1,1}, //Ziffer 5
+ {1,0,1,1,1,1,1}, //Ziffer 6
+ {1,1,1,0,0,0,0}, //Ziffer 7
+ {1,1,1,1,1,1,1}, //Ziffer 8
+ {1,1,1,1,0,1,1} //Ziffer 9
+ };
+
+ public Segment7()
+ {
+ this(0);
+ }
+
+ public Segment7(int digit)
+ {
+ super();
+ this.digit = digit;
+ this.hasfocus = false;
+ enableEvents(AWTEvent.COMPONENT_EVENT_MASK);
+ enableEvents(AWTEvent.FOCUS_EVENT_MASK);
+ enableEvents(AWTEvent.MOUSE_EVENT_MASK);
+ enableEvents(AWTEvent.KEY_EVENT_MASK);
+ }
+
+ public Dimension getPreferredSize()
+ {
+ return new Dimension(5*10,5*18);
+ }
+
+ public Dimension getMinimumSize()
+ {
+ return new Dimension(1*10,1*18);
+ }
+
+ public boolean isFocusTraversable()
+ {
+ return true;
+ }
+
+ public void paint(Graphics g)
+ {
+ Color darkred = new Color(127,0,0);
+ Color lightred = new Color(255,0,0);
+ Color yellow = new Color(255,255,0);
+ //dx und dy berechnen
+ int dx = getSize().width / 10;
+ int dy = getSize().height / 18;
+ //Hintergrund
+ g.setColor(darkred);
+ g.fillRect(0,0,getSize().width,getSize().height);
+ //Segmente
+ if (hasfocus) {
+ g.setColor(yellow);
+ } else {
+ g.setColor(lightred);
+ }
+ for (int i=0; i < 7; ++i) { //alle Segmente
+ if (digits[digit][i] == 1) {
+ Polygon poly = new Polygon();
+ for (int j = 0; j < 6; ++j) { //alle Eckpunkte
+ poly.addPoint(dx*polysx[i][j],dy*polysy[i][j]);
+ }
+ g.fillPolygon(poly);
+ }
+ }
+ //Trennlinien
+ g.setColor(darkred);
+ g.drawLine(0,0,dx*10,dy*10);
+ g.drawLine(0,8*dy,10*dx,18*dy);
+ g.drawLine(0,10*dy,10*dx,0);
+ g.drawLine(0,18*dy,10*dx,8*dy);
+ }
+
+ public int getValue()
+ {
+ return digit;
+ }
+
+ public void setValue(int value)
+ {
+ digit = value % 10;
+ }
+
+ protected void processComponentEvent(ComponentEvent event)
+ {
+ if (event.getID() == ComponentEvent.COMPONENT_SHOWN) {
+ requestFocus();
+ }
+ super.processComponentEvent(event);
+ }
+
+ protected void processFocusEvent(FocusEvent event)
+ {
+ if (event.getID() == FocusEvent.FOCUS_GAINED) {
+ hasfocus = true;
+ repaint();
+ } else if (event.getID() == FocusEvent.FOCUS_LOST) {
+ hasfocus = false;
+ repaint();
+ }
+ super.processFocusEvent(event);
+ }
+
+ protected void processMouseEvent(MouseEvent event)
+ {
+ if (event.getID() == MouseEvent.MOUSE_PRESSED) {
+ requestFocus();
+ if (!event.isShiftDown()) {
+ if (event.isMetaDown()) {
+ setValue(getValue() + 1); //increment by 1
+ } else {
+ setValue(getValue() + 9); //decrement by 1
+ }
+ }
+ repaint();
+ }
+ super.processMouseEvent(event);
+ }
+
+ protected void processKeyEvent(KeyEvent event)
+ {
+ if (event.getID() == KeyEvent.KEY_PRESSED) {
+ char key = event.getKeyChar();
+ if (key >= '0' && key <= '9') {
+ setValue(key - '0');
+ repaint();
+ } else if (key == '+') {
+ setValue(getValue() + 1); //increment by 1
+ repaint();
+ } else if (key == '-') {
+ setValue(getValue() + 9); //decrement by 1
+ repaint();
+ }
+ }
+ super.processKeyEvent(event);
+ }
+} \ No newline at end of file