hiho
also ich habe mir jetzt ein eigenes dialogelement erstellt.
es soll eine led anzeige bereitstellen, die die zahlen 0-9 anzeigen kann, oder einfach leer ist.
desweiteren ist es in 3 ringe unterteilt, die jeder getrennt für eine bestimmte zeit aufblinken sollen.
soweit funktioniert auch alles, bis auf 2 sachen:
die zahlen haben eine unterschiedliche breite, d.h. es sind auch unterschiedlich viele leds. wenn jetzt eine zahl schmaler ist, als die vorher angezeigte, habe ich an der rechten seite einen schwarzen rand. andersrum genauso. ist die nächste zahl breiter, wird nichtz alles angezeigt.
gibt es eine möglichkeit, dem layoutmanager zu sagen, dass er die größe neu berechnen soll? oder andere vorgehensweisen, die das problem beheben? ich wollte die größe nämlich so lassen, wegen der symmetrie
das 2 problem ist die methode zum blinken. sie soll den jeweiligen ring anzeigen, und dann eine bestimmte zeit warten. das habe ich mit
versucht, aber ich bekomme immer eine IllegalMonitorStateException.
was mache ich falsch?
und vllt kann mir jemand den ein oder anderen tipp geben, was ichs onst anders/besser machen kann (vllt der 3d array), aber muss nicht unbedingt sein
mfg und danke schon mal für die mühe
Alles anzeigen
also ich habe mir jetzt ein eigenes dialogelement erstellt.
es soll eine led anzeige bereitstellen, die die zahlen 0-9 anzeigen kann, oder einfach leer ist.
desweiteren ist es in 3 ringe unterteilt, die jeder getrennt für eine bestimmte zeit aufblinken sollen.
soweit funktioniert auch alles, bis auf 2 sachen:
die zahlen haben eine unterschiedliche breite, d.h. es sind auch unterschiedlich viele leds. wenn jetzt eine zahl schmaler ist, als die vorher angezeigte, habe ich an der rechten seite einen schwarzen rand. andersrum genauso. ist die nächste zahl breiter, wird nichtz alles angezeigt.
gibt es eine möglichkeit, dem layoutmanager zu sagen, dass er die größe neu berechnen soll? oder andere vorgehensweisen, die das problem beheben? ich wollte die größe nämlich so lassen, wegen der symmetrie
das 2 problem ist die methode zum blinken. sie soll den jeweiligen ring anzeigen, und dann eine bestimmte zeit warten. das habe ich mit
versucht, aber ich bekomme immer eine IllegalMonitorStateException.
was mache ich falsch?
und vllt kann mir jemand den ein oder anderen tipp geben, was ichs onst anders/besser machen kann (vllt der 3d array), aber muss nicht unbedingt sein
mfg und danke schon mal für die mühe
Quellcode
- package PingPong;
- import java.awt.Canvas;
- import java.awt.Color;
- import java.awt.Container;
- import java.awt.Dimension;
- import java.awt.FlowLayout;
- import java.awt.Graphics;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.security.InvalidParameterException;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.WindowConstants;
- /**
- * This class provides a LED display.
- * It can show any number from 0 till 9 or an empty display.
- *
- * @author
- * @version 1.0.1
- */
- public class Leds extends Canvas{
- public static final long serialVersionUID = 3242345986745L;
- private final int HEIGHT = 7;
- private final int LEDSIZE = 25;
- public final static int OUTER_RING = 0;
- public final static int MIDDLE_RING = 1;
- public final static int INNER_RING = 2;
- private final Color OFFCOLOR = new Color(0,0,100);
- private final Color ONCOLOR = new Color(0,0,255);
- private final Color BGCOLOR = new Color(0,0,40);
- private int number;
- // number of leds for each number
- private int[] width = {6,6,6,6,6,4,5,5,5,5,5,5,5,5};
- // defines whether a led is on or off
- private int[][][] numbers = {
- { //outer ring
- {1,1,1,1,1,1}, //row 0
- {1,0,0,0,0,1}, //row 1
- {1,0,0,0,0,1}, //row 2
- {1,0,0,0,0,1}, //row 3
- {1,0,0,0,0,1}, //row 4
- {1,0,0,0,0,1}, //row 5
- {1,1,1,1,1,1} //row 6
- },
- { //middle ring
- {0,0,0,0,0,0}, //row 0
- {0,1,1,1,1,0}, //row 1
- {0,1,0,0,1,0}, //row 2
- {0,1,0,0,1,0}, //row 3
- {0,1,0,0,1,0}, //row 4
- {0,1,1,1,1,0}, //row 5
- {0,0,0,0,0,0} //row 6
- },
- { //inner ring
- {0,0,0,0,0,0}, //row 0
- {0,0,0,0,0,0}, //row 1
- {0,0,1,1,0,0}, //row 2
- {0,0,1,1,0,0}, //row 3
- {0,0,1,1,0,0}, //row 4
- {0,0,0,0,0,0}, //row 5
- {0,0,0,0,0,0} //row 6
- },
- { //nothing
- {0,0,0,0,0,0}, //row 0
- {0,0,0,0,0,0}, //row 1
- {0,0,0,0,0,0}, //row 2
- {0,0,0,0,0,0}, //row 3
- {0,0,0,0,0,0}, //row 4
- {0,0,0,0,0,0}, //row 5
- {0,0,0,0,0,0} //row 6
- },
- { //zero
- {0,0,0,0,0,0}, //row 0
- {0,0,1,1,0,0}, //row 1
- {0,1,0,0,1,0}, //row 2
- {0,1,0,0,1,0}, //row 3
- {0,1,0,0,1,0}, //row 4
- {0,0,1,1,0,0}, //row 5
- {0,0,0,0,0,0} //row 6
- },
- { //one
- {0,0,0,0}, //row 0
- {0,0,1,0}, //row 1
- {0,1,1,0}, //row 2
- {0,0,1,0}, //row 3
- {0,0,1,0}, //row 4
- {0,0,1,0}, //row 5
- {0,0,0,0} //row 6
- },
- { //two
- {0,0,0,0,0}, //row 0
- {0,1,1,1,0}, //row 1
- {0,0,0,1,0}, //row 2
- {0,0,1,1,0}, //row 3
- {0,1,0,0,0}, //row 4
- {0,1,1,1,0}, //row 5
- {0,0,0,0,0}, //row 6
- },
- { //three
- {0,0,0,0,0}, //row 0
- {0,1,1,1,0}, //row 1
- {0,0,0,1,0}, //row 2
- {0,1,1,0,0}, //row 3
- {0,0,0,1,0}, //row 4
- {0,1,1,1,0}, //row 5
- {0,0,0,0,0}, //row 6
- },
- { //four
- {0,0,0,0,0}, //row 0
- {0,1,0,1,0}, //row 1
- {0,1,0,1,0}, //row 2
- {0,1,1,1,0}, //row 3
- {0,0,0,1,0}, //row 4
- {0,0,0,1,0}, //row 5
- {0,0,0,0,0}, //row 6
- },
- { //five
- {0,0,0,0,0}, //row 0
- {0,1,1,1,0}, //row 1
- {0,1,0,0,0}, //row 2
- {0,1,1,0,0}, //row 3
- {0,0,0,1,0}, //row 4
- {0,1,1,1,0}, //row 5
- {0,0,0,0,0}, //row 6
- },
- { //six
- {0,0,0,0,0}, //row 0
- {0,0,1,1,0}, //row 1
- {0,1,0,0,0}, //row 2
- {0,1,1,1,0}, //row 3
- {0,1,0,1,0}, //row 4
- {0,1,1,1,0}, //row 5
- {0,0,0,0,0}, //row 6
- },
- { //seven
- {0,0,0,0,0}, //row 0
- {0,1,1,1,0}, //row 1
- {0,0,0,1,0}, //row 2
- {0,0,1,0,0}, //row 3
- {0,1,0,0,0}, //row 4
- {0,1,0,0,0}, //row 5
- {0,0,0,0,0}, //row 6
- },
- { //eight
- {0,0,0,0,0}, //row 0
- {0,1,1,1,0}, //row 1
- {0,1,0,1,0}, //row 2
- {0,0,1,0,0}, //row 3
- {0,1,0,1,0}, //row 4
- {0,1,1,1,0}, //row 5
- {0,0,0,0,0}, //row 6
- },
- { //nine
- {0,0,0,0,0}, //row 0
- {0,1,1,1,0}, //row 1
- {0,1,0,1,0}, //row 2
- {0,1,1,1,0}, //row 3
- {0,0,0,1,0}, //row 4
- {0,1,1,0,0}, //row 5
- {0,0,0,0,0}, //row 6
- }
- };
- /**
- * Paints LEDs viewing a number.
- *
- * @param number
- * 0-9 for number or -1 for empty display.
- */
- public Leds(int number){
- if(number >= -1 && number <= 9){
- this.number = number+4;
- }
- else{
- new InvalidParameterException("number exceeds the range of values");
- }
- }
- public Dimension getPreferredSize(){
- return new Dimension((2*(width[number])+1) + (width[number]*LEDSIZE), ((2*7)+1) + (7*LEDSIZE)); // size of display
- }
- public Dimension getMaximumSize(){
- return new Dimension((2*(width[number])+1) + (width[number]*LEDSIZE), ((2*7)+1) + (7*LEDSIZE)); // size of display
- }
- public Dimension getMinimumSize(){
- return new Dimension((2*(width[number])+1) + (width[number]*LEDSIZE), ((2*7)+1) + (7*LEDSIZE)); // size of display
- }
- /**
- * Paints a display with LEDs viewing a number.
- *
- * @param g
- * Graphics to paint.
- */
- public void paint(Graphics g){
- //background
- g.setColor(BGCOLOR);
- g.fillRect(0,0,getSize().width,getSize().height); // paints the background
- //LEDs
- for(int i = 0, y = 2; i < HEIGHT; i++){ // row 1-7
- for(int j = 0, x = 2; j < width[number]; j++){ // leds for each row
- if(numbers[number][i][j] == 0){ g.setColor(OFFCOLOR); }
- else{ g.setColor(ONCOLOR); }
- g.fillOval(x, y, LEDSIZE, LEDSIZE);
- x += LEDSIZE+2;
- }
- y += LEDSIZE+2;
- }
- }
- /**
- * Returns the current shown number.
- *
- * @return number
- * 0-9 for number or -1 for empty display.
- */
- public int getNumber(){
- return number-4;
- }
- /**
- * Sets the number should be shown by the display.
- *
- * @param number
- * 0-9 for number or -1 for empty display.
- */
- public void setNumber(int number){
- if(number >= -1 && number <= 9){
- this.number = number+4;
- }
- else{
- new InvalidParameterException("number exceeds the range of values");
- }
- repaint();
- }
- /**
- * The ring ring flashes for a time.
- *
- * @param ring
- * one of constants OUTER_RING, MIDDEL_RING, INNER_RING.
- *
- * @param millies
- * Time in milliseconds.
- *
- * @throws InterruptedException
- */
- public void flash(int ring, int millies) throws InterruptedException{
- this.number = ring;
- repaint();
- this.wait(millies);
- this.number = -1;
- repaint();
- }
- /**
- * Main method.
- *
- * @param args
- * Arguments to pass.
- */
- public static void main(String[] args){
- JFrame f = new JFrame("Test");
- f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- Container c = f.getContentPane();
- c.setLayout(new FlowLayout());
- for(int i = 0; i <= 9; i++){
- c.add(new Leds(i));
- }
- final Leds blinkLeds = new Leds(-1);
- c.add(blinkLeds);
- JButton button1 = new JButton("count");
- button1.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent e){
- int count = blinkLeds.getNumber();
- if(count < 9){
- count++;
- }
- else{
- count = -1;
- }
- blinkLeds.setNumber(count);
- }
- });
- JButton button2 = new JButton("blink");
- button2.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent e){
- try {
- blinkLeds.flash(OUTER_RING, 1000);
- wait(500);
- blinkLeds.flash(MIDDLE_RING, 1000);
- wait(500);
- blinkLeds.flash(INNER_RING, 1000);
- } catch (InterruptedException e1) {
- e1.printStackTrace();
- }
- }
- });
- c.add(button1);
- c.add(button2);
- f.pack();
- f.setVisible(true);
- }
- }