Im ersten Beispiel werden die Ziffern 0 bis 9 nacheinander angezeigt. |
// DigitalAnzeige.java import ch.aplu.util.*; public class DigitalAnzeige { public DigitalAnzeige() { GPanel p = new GPanel(0, 100, 0, 100); Display display = new Display(35, 20, 60, p); while (true) { for(int i = 0; i < 10; i++) { p.clear(); display.showDigit(i); Console.delay(1000); } } } public static void main(String[] args) { new DigitalAnzeige(); } } class Display { private GPanel p; private Segment segment = new Segment(); private double x; //linke untere Ecke der Ziffer private double y; private double h ; //Höhe der Ziffer private double w ; //Breite private double d ; //Abstand zwischen Linien mit gleichem Eckpunkt private boolean [] d0 = {true, true, true, true, true, true, false}; private boolean [] d1 = {false, true, true, false, false, false, false}; private boolean [] d2 = {true, false, true, true, false, true, true}; private boolean [] d3 = {true, true, true, true, false, false, true}; private boolean [] d4 = {false, true, true, false, true, false, true}; private boolean [] d5 = {true, true, false, true, true, false, true}; private boolean [] d6 = {true, true, false, true, true, true, true}; private boolean [] d7 = {false, true, true, true, false, false, false}; private boolean [] d8 = {true, true, true, true, true, true, true}; private boolean [] d9 = {true, true, true, true, true, false, true}; private boolean [][] digits = {d0,d1,d2,d3,d4,d5,d6,d7,d8,d9}; //d0 ist die 1-te Zeile von digits private class Segment { public void draw(double x, double y, boolean horizontal){ if (horizontal) p.line(x + d, y, x + w - d, y); else p.line(x, y + d, x, y + h/2 - d); } } public Display(double xPos, double yPos, double hight, GPanel apanel) { p = apanel; x = xPos; y = yPos; h = hight; w = h / 2; d = h / 30; p.lineWidth(10); } public void showDigit(int value) { if (digits[value][0]) segment.draw(x, y, true); if (digits[value][1]) segment.draw(x + w, y, false); if (digits[value][2]) segment.draw(x + w, y + h/2, false); if (digits[value][3]) segment.draw(x, y + h, true); if (digits[value][4]) segment.draw(x, y + h/2, false); if (digits[value][5]) segment.draw(x, y, false); if (digits[value][6]) segment.draw(x, y + h/2, true); } } |
Zweistellige DigitalanzeigeDie Applikation lässt sich sehr einfach zu einer zweistelligen Anzeige erweitern. Dabei wird dieselbe Klasse Display wie im ersten Beispiel verwendet. |
// DigitalAnzeigeEx2.java import ch.aplu.util.*; public class DigitalAnzeigeEx { public DigitalAnzeigeEx2() { GPanel p = new GPanel(0, 100, 0, 100); Display display1 = new Display(15, 20, 60, p); Display display2 = new Display(55, 20, 60, p); p.enableRepaint( false ); while (true) { for(int i = 0; i < 10; i++) { for(int j = 0; j < 10; j++) { p.clear(); display1.showDigit(i); display2.showDigit(j); p.repaint(); Console.delay(250); } } } } public static void main(String[] args) { new DigitalAnzeigeEx2(); } } |
Die Digitalanzeige lässt sich mit einem Timer aus der Klasse LoResAlarmTimer zeitlich genau steuern. Auch hier wird erneut die Klasse Display verwendet.
//DigitaleUhr.java import ch.aplu.util.*; public class DigitaleUhr implements TimerListener { GPanel p = new GPanel(0, 100, 0, 100); int zsec = 0; Display display1 = new Display(10, 25, 30, p); Display display2 = new Display(35, 25, 30, p); Display display3 = new Display(55, 25, 30, p); Display display4 = new Display(80, 25, 20, p); public DigitaleUhr() { LoResAlarmTimer timer = new LoResAlarmTimer(100000); timer.addTimerListener(this); p.enableRepaint(false); } public boolean timeElapsed() { p.clear(); display4.showDigit(zsec % 10); display3.showDigit((int)(zsec / 10) % 10); display2.showDigit((int)(zsec / 100) % 10); display1.showDigit((int)(zsec / 1000)); p.repaint(); zsec++; return zsec < 10000; } public static void main(String[] args) { new DigitaleUhr(); } } |