Problem beim Anzeigen von Datum und Uhrzeit

Shando

Grünschnabel
Hi Leute,

ich schreibe gerade ein Applet von einem Display (oder ich versuche es gerade) :rolleyes: und bekomme die uhrzeit nicht angezeigt. Ich habe leider mit java noch nicht wirklich viel gemacht also fände ich es toll, wenn mir einer helfen könnte. Ich habe schon die Suche benutzt, aber die anderen Uhren konnten mir nicht wirklich helfen.

Hier mal was ich bis jetzt hab:

PHP:
package terminal;
import	javax.swing.*;
import	java.awt.*;
import	java.util.*;
import java.lang.*;
import java.text.*;

import java.util.Hashtable;
import java.awt.font.LineBreakMeasurer;
import java.awt.font.TextAttribute;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;
/**
 *
 * @author  praktikant
 */
public class DisplayForm extends javax.swing.JPanel implements Runnable
{	
	private LineBreakMeasurer lineMeasurer;
	private int paragraphStart;
	private int paragraphEnd;
	
	
	public static String
						VERSION = "1.1.0";
	private java.text.SimpleDateFormat 
						f1, f2;
	private String		show = "00:00";
	private boolean		running;
	private Thread		thread;
	private boolean		even = false;
	private Graphics	g2;
	private Image		screen;
	
		
		
	
	private static final 
        Hashtable<TextAttribute, Object> map =
           new Hashtable<TextAttribute, Object>();
	
	  static 
		{
        map.put(TextAttribute.FAMILY, "Serif");
        map.put(TextAttribute.SIZE, new Float(18.0));
		}  
	
	private static AttributedString kopf = new AttributedString(
        "Unitime                                                         " +
        "........-gmbh.com                                                  ",
        map);
	
		private void uhrzeit()
		
		{
		
			f1 = new java.text.SimpleDateFormat("HH:mm");
			f2 = new java.text.SimpleDateFormat("HH mm");
		}
		
		public void start()
	{
//		initVars();
		
		
		g2 = screen.getGraphics();
		g2.setPaintMode();
		
		
		thread = new Thread(this, "clock");
		thread.setPriority(Thread.MIN_PRIORITY);
		running = true;
		thread.start();
	}	
	
	
	public void update(Graphics g)
	{
		  paint(g);
	}	
	

	public void paintComponent(Graphics g) 
	{

		super.paintComponent(g);
			setBackground(Color.gray);

			Graphics2D g2d = (Graphics2D)g;

	 if (lineMeasurer == null) 
		{
            AttributedCharacterIterator paragraph = kopf.getIterator();
            paragraphStart = paragraph.getBeginIndex();
            paragraphEnd = paragraph.getEndIndex();
            FontRenderContext frc = g2d.getFontRenderContext();
            lineMeasurer = new LineBreakMeasurer(paragraph, frc);
        }

        // Set break width to width of Component.
        float breakWidth = (float)getSize().width;
        float drawPosY = 0;
        // Set position to the index of the first character in the paragraph.
        lineMeasurer.setPosition(paragraphStart);

        // Get lines until the entire paragraph has been displayed.
        while (lineMeasurer.getPosition() < paragraphEnd) 
		{

            // Retrieve next layout. A cleverer program would also cache
            // these layouts until the component is re-sized.
            TextLayout layout = lineMeasurer.nextLayout(breakWidth);

            // Compute pen x position. If the paragraph is right-to-left we
            // will align the TextLayouts to the right edge of the panel.
            // Note: this won't occur for the English text in this sample.
            // Note: drawPosX is always where the LEFT of the text is placed.
            float drawPosX = layout.isLeftToRight()
                ? 0 : breakWidth - layout.getAdvance();

            // Move y-coordinate by the ascent of the layout.
            drawPosY += layout.getAscent();

            // Draw the TextLayout at (drawPosX, drawPosY).
            layout.draw(g2d, drawPosX, drawPosY);

            // Move y-coordinate in preparation for next layout.
            drawPosY += layout.getDescent() + layout.getLeading();
        }
		
		 g.drawLine(0, 45, 500, 45);
		 for (int i=0; i<6; i++)
		 {
			  g.drawRect(290 + 15*i, 5, 15, 20);
		 }
		 g.setFont(new Font(Font.SERIF, Font.PLAIN, 20));
		 g.drawLine(0, 225, 500, 225);
		 g.drawRect(5, 230, 125, 30);
		 g.drawRect(135, 230, 125, 30);
		 g.drawRect(265, 230 , 125, 30);
		 g.drawString("Kommt:", 40, 250);
		 g.drawString("Geht:", 300, 250);
		 g.drawString("Abwesend:", 160, 250);
		  
		 	if (g2 == null)
			return;
// erst mal g2 mit dem Bildinhalt schreiben		
			g2.drawString(show, 100, 100);
			
//// Ausgabe updaten
		g.drawImage(screen, 0, 0, null);
	}
	

	public void run()
	{
		
		while(running)
		{
			if (even)
				show = f1.format(new Date()); //"HH:mm"
			else
				show = f2.format(new Date());		//"HH mm" 
			even = !even;	
			repaint();
			
			try
			{
				thread.sleep(499);
			} catch (Exception e)
			{
				System.out.println("" +e);
			}
		}
	}
	
	
	
/** stop this applet */	
	public void stop()
	{
		running = false;
		thread.interrupt();
	}

	
	/** This method is called from within the constructor to
	 * initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is
	 * always regenerated by the Form Editor.
	 */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
    private void initComponents()
    {

        setBackground(new java.awt.Color(118, 107, 103));
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
    }// </editor-fold>                        
	
	

    // Variables declaration - do not modify                     
    // End of variables declaration                   


	
}

so sollte es aussehen:
display.jpg
(der Punkt zwischen Stunde und Minute blinkt)

Vielen Dank schon mal im Voraus!

Shando
 
Zuletzt bearbeitet:
Ob dein Arbeitgeber das so witzig findest dass du Code mit dessen Namen drin postest?

Außerdem versuche doch bitte nicht alles einfach hinzuzeichnen sondern Komponenten wie eben Labels und Panels zu nutzen denen du ein Layout zuweist. Wenn ich nämlich die Fenstergröße bei dir verändere wird alles sonstwo hingezeichnet aber nicht da wo es hin soll.

Deine Uhrzeit wird bei mir nicht gezeichnet weil du dafür g2 benutzt welches bei mir null ist. Wenn du g benutzt und den null-check auskommentierst dann geht das auch.
 
jop thx
Allerdings zeigt er bei mir nur 00:00 an. Das mit den Jlabels/Jpanels werde ich später in Angriff nehmen. Mir geht es primär erstmal darum, die Uhrzeit aktualisiert angezeigt zu bekommen. :)

Apropos Arbeitgeber
Wäre toll, wenn ich dafür Geld bekommen würde ;-)
Ist in Form eines Schulpraktikums und ich wollte was anständiges in nem Computerladen machen. Und so bin ich zu dieser glorreichen Aufgabe gekommen, die sich nicht nur auf das Display beschränkt, sondern auf das ganze Gerät.
Naja also hab ich gedacht ich schreib hier mal rein, weil mir hier leider keiner helfen kann.

edit: Guck dir mal das Bild nochmal an :)

Shando
 
Ums Bild gehts nicht, es steht im Code drin.

Und nächstes Mal bitte mit einer main-Methode mit der ich das ganze auch starten kann. Sonst muss ich mir selber eine zusammenbasteln und dafür hab ich normalerweise nicht die Zeit.

Das es nicht geht liegt wohl am g2 was halt nie initialisiert wird und in der run Methode benutzt wird und an f1 und f2 die wohl ebenfalls noch null sind. Diese kannst du aber doch auch gleich am Anfang initialisieren:
Java:
private java.text.SimpleDateFormat f1 = new java.text.SimpleDateFormat("HH:mm");
private java.text.SimpleDateFormat f2 = new java.text.SimpleDateFormat("HH mm");
 
Ich hab schon ohne Ende probiert aber es funktioniert nicht.
Gibt es noch Vorschläge für andere Lösungen?

Vielen Dank

Shando
 
So ich hab es jetzt erstmal so hinbekommen. Noch bisschen skalieren und dann passt alles.

@zeja Natürlich hattest du Recht mit dem leeren content von g2 :)

PHP:
package terminal;
import	javax.swing.*;
import	java.awt.*;
import	java.util.*;
	
	

public class TimeApplet extends java.applet.Applet
	implements Runnable
{

	private Image		image;
	private Font		font;
	private	Color		color;
	private String		outText = "00:00";
	private boolean		even = false;
	private Thread		thread;
	private java.text.SimpleDateFormat 
						f1, f2, e1, e2;
	private Image		screen;
	private Graphics	g2;
	private boolean		running;
	private String		date;
	private String		day = ",";
		
		
	

		
	/** Initialization method that will be called after the applet is loaded
	 *  into the browser.
	 */	
	public void init()
	{	
//		String[] fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
//		for (String fontName: fontNames)
//			System.out.println(fontName);
		
		
		
		
		ImageIcon ii = new ImageIcon(getClass().getResource("pics/weiss.jpg"));
		image = ii.getImage();
		f1 = new java.text.SimpleDateFormat("HH:mm");
		f2 = new java.text.SimpleDateFormat("HH mm");
		e1 = new java.text.SimpleDateFormat("dd.MM.yy");
		e2 = new java.text.SimpleDateFormat("EEEEEEE");
// screen für Doppelpufferung
		screen = createImage(image.getWidth(null), image.getHeight(null));
		
// Rest erfolgt in start()
		
	}	
		
		
		
/** start this applet (after init())*/	
	public void start()
	{
//		initVars();
//		font = new Font("Courier New", Font.BOLD, fontSize);
//		color = new Color(colorR, colorG, colorB);
		
		g2 = screen.getGraphics();
		g2.setPaintMode();
		g2.setFont(font);
		g2.setColor(color);
		
		thread = new Thread(this, "clock");
		thread.setPriority(Thread.MIN_PRIORITY);
		running = true;
		thread.start();
	}
	
	
/** update überschreiben, um Bildschirmlöschung zu verhindern. Das mindert das flackern. */	
	public void update(Graphics g)
	{
		  paint(g);
		   g.drawLine(0, 45, 500, 45);
		 for (int i=0; i<6; i++)
		 {
			  g.drawRect(290 + 15*i, 5, 15, 20);
		 }
		 g.setFont(new Font(Font.SERIF, Font.PLAIN, 20));
		 g.drawLine(0, 225, 500, 225);
		 g.drawRect(5, 230, 125, 30);
		 g.drawRect(135, 230, 125, 30);
		 g.drawRect(265, 230 , 125, 30);
		 g.drawString("Kommt:", 40, 250);
		 g.drawString("Geht:", 300, 250);
		 g.drawString("Abwesend:", 160, 250);
		  g.setFont(new Font(Font.SERIF, Font.PLAIN, 18));
		  g.drawString("Unitime", 5, 18);
		  g.drawString("unicon-gmbh.com",5 , 38);
		  g.drawString(date, 180, 200);
		  g.drawString(day, 90, 200);
		 
	}	

	
	
	
/** Anzeige aktualisieren. update() muss überschrieben sein, sonst ist vor paint() der Bildschirm gelöscht. */	
	public void paint(Graphics g) 
	{
		
				
		
		if (g2 == null)
			return;
// erst mal g2 mit dem Bildinhalt schreiben		
//		g2.drawImage(image, 0, 0, image.getWidth(null), image.getHeight(null), Color.black, this);
			g2.drawImage(image, 0, 0, null);
			g2.setFont(new Font("Courier New", Font.BOLD, 80));
			g2.drawString(outText, 90, 180);

	
// Ausgabe updaten
		g.drawImage(screen, 0, 0, null);
		
	}

	
	
/** Wenn sich der Text geändert hat, wird er innerhalb einiger ms angezeigt **/
	public void run()
	{
		 date = e1.format(new Date());
		 day = e2.format(new Date());
		 
		while(running)
		{
			if (even)
				outText = f1.format(new Date()); //"HH:mm"
			else
				outText = f2.format(new Date());		//"HH mm" 
			even = !even;	
			repaint();
			
			try
			{
				thread.sleep(499);
			} catch (Exception e)
			{
				System.out.println("" +e);
			}
		}
		
	}
	
	
	
/** stop this applet */	
	public void stop()
	{
		running = false;
		thread.interrupt();
	}
	
}
 
Hi,

leider Gottes habe ich nun noch ein Problem und zwar habe ich heute alles in ein großes Panel gezeichnet, welches wiederum 3 weitere Jpanels enthält. Nun habe ich die beiden anderen Panels schon gefüllt, aber im obersten Panel (das Display) tut sich nichts. Kann mir einer sagen, was ich falsch mache? :confused:
Oder noch besser: Ne andere Methode um in einem Panel zu zeichnen?



Danke im Voraus

ach ja hier noch der Quellcode

PHP:
package terminal;
import java.awt.*;
import javax.swing.*;
import java.awt.event.MouseEvent.*;
import	java.util.*;

/**
 *
 * @author  praktikant
 */
public class ViewForm extends javax.swing.JPanel
{
	private Image image;

	/** Creates new form ViewForm */
	public ViewForm()
	{
		ImageIcon ii = new ImageIcon(getClass().getResource("pics/keyboard.jpg"));
		image = ii.getImage();
		initComponents();
		
		pDisplay.add(new MyDraw());
		
		int x, y;

		for (int i=0; i<9; i++)
		{
		
			x = i % 3;
			y = i / 3;
			
			ImagePanel p1 = new ImagePanel(x, y, image);

	        p1.setBackground(new java.awt.Color(255, 255, 204));
		    p1.setLayout(new java.awt.BorderLayout());
		
			p1.addMouseListener(new java.awt.event.MouseAdapter()
			{
				public void mouseClicked(java.awt.event.MouseEvent evt)
				{
					eMouseClicked(evt);
				}
			});	
			
			p1.setName("" + i);

//			pList.add(p);
			pKeyboard.add(p1);
		} 
		
		

		
 
//        this.setVisible(true);

	}
	
				
public class MyDraw extends JPanel 
{

//        public MyDraw() 
//		{
//
//			
//
////            this.setBorder(BorderFactory.createLoweredBevelBorder());
//
//        }

 

      public void paintComponent(Graphics g) 
		 {
			super.paintComponent(g);
			g.drawLine(0, 45, 500, 45);
		 for (int i=0; i<6; i++)
		 {
			  g.drawRect(290 + 15*i, 5, 15, 20);
		 }
		 g.setFont(new Font(Font.SERIF, Font.PLAIN, 20));
		 g.drawLine(0, 30, 200, 30);
		 g.drawRect(5, 230, 125, 30);
		 g.drawRect(135, 230, 125, 30);
		 g.drawRect(265, 230 , 125, 30);
		 g.drawString("Kommt:", 40, 250);
		 g.drawString("Geht:", 300, 250);
		 g.drawString("Abwesend:", 160, 250);
			g.setFont(new Font(Font.SERIF, Font.PLAIN, 18));
			g.drawString("Unitime", 5, 18);
			g.drawString(".....-gmbh.com",5 , 38);
//			g.drawString(date, 200, 190);
//			g.drawString(day, 120, 190);
			g.drawString(",", 185, 190);
				g.setFont(new Font(Font.SERIF, Font.PLAIN, 10));
				g.drawString("254", 336, 20);
				
				
		 }	

    }
	


	
	public void eMouseClicked(java.awt.event.MouseEvent evt)
	{
		String key;
		key = evt.getComponent().getName();
		System.out.println("" + evt.getComponent().getName());
//		if (key.equals("0"))
//		{
//			
//		} else if (key.equals("1"))
//		
//		{
//			
//		}
// ...
		
	}

	

	/** This method is called from within the constructor to
	 * initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is
	 * always regenerated by the Form Editor.
	 */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
    private void initComponents()
    {
        java.awt.GridBagConstraints gridBagConstraints;

        pDisplay = new javax.swing.JPanel();
        pKeyboard = new javax.swing.JPanel();
        pLeser = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();

        setLayout(new java.awt.GridBagLayout());

        setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        setDoubleBuffered(false);
        setMaximumSize(new java.awt.Dimension(320, 700));
        setMinimumSize(new java.awt.Dimension(310, 620));
        setPreferredSize(new java.awt.Dimension(320, 634));
        setRequestFocusEnabled(false);
        pDisplay.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0), 3));
        pDisplay.setPreferredSize(new java.awt.Dimension(320, 200));
        pDisplay.addMouseListener(new java.awt.event.MouseAdapter()
        {
            public void mouseClicked(java.awt.event.MouseEvent evt)
            {
                pDisplayMouseClicked(evt);
            }
        });

        org.jdesktop.layout.GroupLayout pDisplayLayout = new org.jdesktop.layout.GroupLayout(pDisplay);
        pDisplay.setLayout(pDisplayLayout);
        pDisplayLayout.setHorizontalGroup(
            pDisplayLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 314, Short.MAX_VALUE)
        );
        pDisplayLayout.setVerticalGroup(
            pDisplayLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 194, Short.MAX_VALUE)
        );
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
        add(pDisplay, gridBagConstraints);

        pKeyboard.setLayout(new java.awt.GridLayout(3, 3, 0, 1));

        pKeyboard.setBackground(new java.awt.Color(176, 192, 205));
        pKeyboard.setMaximumSize(new java.awt.Dimension(300, 280));
        pKeyboard.setMinimumSize(new java.awt.Dimension(0, 0));
        pKeyboard.setPreferredSize(new java.awt.Dimension(300, 300));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        add(pKeyboard, gridBagConstraints);

        pLeser.setBackground(new java.awt.Color(204, 0, 51));
        pLeser.setMaximumSize(new java.awt.Dimension(300, 150));
        pLeser.setPreferredSize(new java.awt.Dimension(300, 150));
        pLeser.addMouseListener(new java.awt.event.MouseAdapter()
        {
            public void mouseClicked(java.awt.event.MouseEvent evt)
            {
                pLeserMouseClicked(evt);
            }
        });

        jLabel1.setIcon(new javax.swing.ImageIcon("C:\\JAVA\\terminal\\src\\terminal\\pics\\leser.jpg"));

        org.jdesktop.layout.GroupLayout pLeserLayout = new org.jdesktop.layout.GroupLayout(pLeser);
        pLeser.setLayout(pLeserLayout);
        pLeserLayout.setHorizontalGroup(
            pLeserLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(pLeserLayout.createSequentialGroup()
                .add(jLabel1)
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        pLeserLayout.setVerticalGroup(
            pLeserLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(pLeserLayout.createSequentialGroup()
                .add(jLabel1)
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
        gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
        add(pLeser, gridBagConstraints);

    }// </editor-fold>                        

	private void pDisplayMouseClicked(java.awt.event.MouseEvent evt)                                      
	{                                          
			System.out.println("Display");
	}                                     
		

	
	
	private void pLeserMouseClicked(java.awt.event.MouseEvent evt)                                    
	{                                        
			System.out.println("Leser");
	}                                   
	
	
    // Variables declaration - do not modify                     
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel pDisplay;
    private javax.swing.JPanel pKeyboard;
    private javax.swing.JPanel pLeser;
    // End of variables declaration                   
	
	
}

Shando
 
Zuletzt bearbeitet:
Zurück