/* 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); } }