Swing Fenster jede sec.neuzeichnen

K

KlemensyXYZ

Gast
Hallo,

ich möchte ein Swing Fenster jede Sekunde neuzeichnen.
Das ganze soll eine Uhr werden.
Java:
package ticktack;

import java.util.Date;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Uhr.java
 *
 * Created on 12.04.2011, 08:21:22
 */

/**
 *
 * @author Klemens
 */
@SuppressWarnings("serial")
public class Uhr extends javax.swing.JFrame {

    /** Creates new form Uhr */
    public Uhr() {
    	
        initComponents();
    }

    /** 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.
     */
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jLabel1.setText("Uhr");

        jLabel2.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jLabel2.setText(String.format("%tT" , new Date ()));
        jLabel2.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true));

        jButton1.setText("Beenden");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jButton1)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(33, 33, 33)
                        .addComponent(jLabel1)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addGap(11, 11, 11)
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton1)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Uhr().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    // End of variables declaration

}

nur weis ich nicht wie ich das machen soll.
ich dachte da an repaint() aber ich habe da noch nichts gefunden was funktionierte.
Wo in meinem Quelltext muss ich denn das überhaupt unterbringen?

Danke
 

Volvagia

Top Contributor
1) In nen Thread oder TimerTask jede Sekunde repaint aufrufen.
2) Eine schlechte Idee, es sollte immer nur der veränderte Bereich wenn möglich gezeichnet werden. Afaik sind repaints das langsamste und gleichzeitig zeitkritischte überhaupt. (Wenn man mal von irgend welchen riesen Algo's absieht.)
3) Swing zeichnet bei "positiven" (so nenne ich das eben) Änderungen, wie setVisible(true), setText(String s), add(Container c) automatisch neu, nur bei "negativen" setVisible(false), remove(Container c) nicht. Du müsstest also einfach nur die neue Uhrzeit mit setText setzen.
 
G

Gast2

Gast
Hier mal noch nen kleines Beispiel mit nem swing Timer:

Java:
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Main {
	public static void main(String[] args) {
		JFrame frame = new JFrame("Counter test");
		frame.setLayout(new FlowLayout());
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		frame.add(new Counter());
		frame.pack();
		frame.setVisible(true);
	}
	
	static class Counter extends JPanel {

		private int counter = 0;
		private Timer timer = null;
		
		public Counter() {
			setPreferredSize(new Dimension(100,100));
			
			timer = new Timer(1000, new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					counter++;
					repaint();
				}
			});
			timer.setRepeats(true);
			timer.start();
		}
		
		@Override
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			g.drawString("Counter: " + counter, 20, 20);
		}
	}
}
 
K

KlemensyXYZ

Gast
ich bekomms nicht hin
hab mir jetzt ne neue Klasse geschrieben:

Java:
package ticktack;

import java.util.Timer;
import java.util.TimerTask;

public class UhrTimer
{
	private int count = 0;
	    
	    public UhrTimer() 
	    {
	        Timer timer = new Timer();
	        TimerTask task = new TimerTask() 
	        {
	            @Override
	            public void run() 
	            {
	                System.out.println(count);
	                if (count > 0)
	                {
	                	count++;
	                	Uhr.repaint();
	                }
	                    
	                
	                if (count == 0)
	                {
	                	count++;
	                	new Uhr().setVisible(true);
	                }
	            }
	        };
	        timer.schedule(task, 0, 1000);
	    }
	    
	    public static void main(String[] args) 
	    {
	        new UhrTimer();
	    }
	}

geht trotzdem nicht, das repaint ist rot unterstrichen
 

Volvagia

Top Contributor
Hm, weil ich so ein netter Kerl bin.

Das verwende ich in einen Projekt. Ist zwar nicht das Schönste, ich hab mich hinterher gefragt, warum ich nicht einfach jede Sekunde die neue Uhrzeit auslese. Habs aber nicht übers Herz gebracht, den Task wieder so zu minimieren. :oops:

Java:
package at.kai.taskbar.systemTrayArea;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JLabel;
import javax.swing.SwingUtilities;

class TimeLabel extends JLabel
{
	private static final long serialVersionUID = 1L;

	TimeLabel()
	{
		super();
		
		TimerTask ic = new IncreaseClock();
		Timer t = new Timer();
		t.scheduleAtFixedRate(ic, 1000, 1000);
	}
	private class IncreaseClock extends TimerTask
	{
		private int hour;
		private int minutes;
		private int seconds;
		
		private IncreaseClock()
		{
			super();
			hour = Integer.parseInt(getTime("H"));
			minutes = Integer.parseInt(getTime("m"));
			seconds = Integer.parseInt(getTime("s"));
			
			setTime();
		}
		public void run()
		{
			boolean setTime = false;
			
			seconds++;
			if(seconds == 60)
			{
				minutes++;
				seconds = 0;
				setTime = true;	
			}
			if(minutes == 60)
			{
				hour++;
				minutes = 0;
				setTime = true;
			}
			if(hour == 24)
			{
				hour = 0;
				minutes = 0;
				seconds = 0;
				setTime = true;
			}
			
			if(setTime)
			{
				SwingUtilities.invokeLater(new Runnable() {
					public void run()
					{
						setTime();
					}
				});	
			}
		}
		private String getTime(String string)
		{
			SimpleDateFormat sdf = new SimpleDateFormat(string);
			return(sdf.format(new Date()));
		}
		private void setTime()
		{
			String h = String.valueOf(hour);
			if(h.length() == 1)
				h = "0" + h;
			
			String m = String.valueOf(minutes);
			if(m.length() == 1)
				m = "0" + m;
			
			setText(h + ":" + m);
		}
	}
}
 
K

KlemensyXYZ

Gast
ok, da steig ich gar nicht durch

andere Frage/Möglichkeit:
ich meine gelesen zu haben das das auch mit repaint(1000) gehen soll.
Wo in meinem Quelltext für das Fenster müsste ich denn das unterbringen?

und zeichnet das das Fenster dann nur einamal neu oder dauerhaft?
 
G

Gast2

Gast
nein es gibt keine repaint(1000); Methode (außer man überläd die vorhandene repaint methode von swing..).
Aber die müsste man dann auch selbst implementieren.

Meine Klasse Counter oben macht doch im Prinzip genau das was du willst. Es ist nen JPanel dass sich jede Sekunde neuzeichnet. Im Actionlistener kannst du dann machen was du willst, z.b. die aktuelle Uhrzeit auslesen.

EDIT:
scheinbar gibts doch so ne Methode ;)
 
Zuletzt bearbeitet von einem Moderator:

Volvagia

Top Contributor
Das wird nicht funktionieren.
Code:
[B]tm[/B] maximum time in milliseconds before update

Meins brauchst du nur in eine Klasse im Projekt kopieren (package muss natürlich geändert werden), und ganz normal als JLabel verwenden.
Eike hat sogar ein ganzes Programm gepostet.
 
K

KlemensyXYZ

Gast
Das wird nicht funktionieren.
Code:
[B]tm[/B] maximum time in milliseconds before update

Meins brauchst du nur in eine Klasse im Projekt kopieren (package muss natürlich geändert werden), und ganz normal als JLabel verwenden.
Eike hat sogar ein ganzes Programm gepostet.

mein problem ist das ich das mit den mir bekannten Mitteln realisieren muss.
D.h. an dem von mir als erstes geposteten Quelltext.
Dieser ist durch NetBeans auto generiert; ich habe nur
Code:
jLabel2.setText(String.format("%tT" , new Date ()));
ergänzt.

Meine Frage ist nach wie vor wie ich dieses Fenster mit einer Zeitangabe einmal die sec. aktualisieren kann, sodass dort immer die Aktuelle Systemzeit steht.

Das heißt auch das ich von niemandem die schönen Programme kopieren kann oder auch will.
ich würde nur gerne wissen wo und wie ich die Methode repaint(), bzw. repaint(1000) in meinem
Quelltext unterbringen kann/soll.

Trotzdem erstmal danke für eure Bemühungen.
 

Volvagia

Top Contributor
Jetzt ist es ein dir bekanntes Mittel. ;)
Du versuchst das Fenster neu zu zeichnen, was aber doch garnichts mit der Aufgabenstellung zu tun hat. Du musst einfach nur die neue Uhrzeit setzen. Dann zeichnet er sowieso selbstständig neu.
 
K

KlemensyXYZ

Gast
ich glaube ich habs kapiert

ein timer der einmal die sec. das jLabel neu "befüllt"?

mal testen

edit:

:applaus:FUNKTIONIERT:applaus:
 
Zuletzt bearbeitet von einem Moderator:
D

despikyxd

Gast
@TO
FAIL

bereits im zweiten post schreibt volvagia das bei z.b. eben setText() automatisch neu gezeichnet wird ...

wenn du dir DAS zu herzen genommen hättest hättest du gewusst das dieser schwachsinn mit "das fenster komplett neu zeichnen" überflüssig ist ... den ein einfaches JLabel.setText() reicht aus um es auch sichtbar zu ändern ... proiers mal mit nem ganz simplen ding aus

Java:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class JLabelRepaintTest extends Thread
{
   JLabel jLabel;
   int c=0;
   public static void main(String[] args) throws Exception { (new JLabelRepaintTest()).start); }
   public JLabelRepaintTest throws Exception
   {
      jLabel=new JLabel(c);
      JFrame jf=new JFrame("TEST");
      jf.setLocation(200, 100);
      jf.add(jLabel);
      jf.pack();
      jf.setVisible(true);
   }
   public void run()
   {
      try
      {
         while(true)
         {
            jLabel.setText(c);
            c++;
            this.sleep(1000);
         }
      } catch(Exception e) { }
   }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Im Fenster bleiben (swing) Java Basics - Anfänger-Themen 16
M Timer-Thread in Swing öffnet jedes Mal ein neues Fenster Java Basics - Anfänger-Themen 6
K Bild als Hintergrund in einem Swing Fenster Java Basics - Anfänger-Themen 21
H Swing Fenster -> Farbauswahl ?! wie speichern, ... Java Basics - Anfänger-Themen 4
G Swing Komponente so groß wie Fenster Java Basics - Anfänger-Themen 10
C In Swing Applet ein Fenster aufziehen Java Basics - Anfänger-Themen 6
C Swing-Fenster mit Menü- und Toolbar Java Basics - Anfänger-Themen 3
megachucky Swing - suche fenster welches nicht schließbar ist Java Basics - Anfänger-Themen 3
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
G Maven Swing: Wie verwende ich WindowListener ? Java Basics - Anfänger-Themen 2
C Threads und Swing Java Basics - Anfänger-Themen 9
A Swing: Raumshiff Java Basics - Anfänger-Themen 3
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
nbergmann Wo ist javax.swing.JOptionPane gespeichert? Java Basics - Anfänger-Themen 4
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
O ImageIcon, Swing Java Basics - Anfänger-Themen 1
O Swing JPanel Java Basics - Anfänger-Themen 4
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
M Wie kann ich hier ein Textfeld hinzufügen Java Swing? Java Basics - Anfänger-Themen 1
M SpielMenü mit Swing Java Basics - Anfänger-Themen 3
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
N javax swing JOptionPane Hilfe Java Basics - Anfänger-Themen 3
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
C Der Swing Layout-Manager hasst mich Java Basics - Anfänger-Themen 4
M Java swing im Browser starten Java Basics - Anfänger-Themen 0
M JavaFX in Swing-Applikationen einbetten Java Basics - Anfänger-Themen 5
Z Threads SWING mit EventQueue.invokeLater Java Basics - Anfänger-Themen 1
P JDK installieren javac behauptet Javax.swing existiert nicht Java Basics - Anfänger-Themen 8
K Ascii Converter mit Swing Java Basics - Anfänger-Themen 4
b1ck Interface Verständnisfrage zum GUI mit "swing" Java Basics - Anfänger-Themen 1
N Erste Schritte Karte in SWING Application Java Basics - Anfänger-Themen 4
D Mehrfacherfassung in Swing GUI Java Basics - Anfänger-Themen 12
D Datum aus Swing in MySQL DB speichern Java Basics - Anfänger-Themen 22
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
J Input/Output Charset Swing- Eingaben? Java Basics - Anfänger-Themen 8
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
Q Threads Threads in Swing Anwendungen Java Basics - Anfänger-Themen 5
B Swing intstalliert Eclips{}, mackiert Rot Java Basics - Anfänger-Themen 6
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
S Input/Output In Java Swing auf Button warten? Java Basics - Anfänger-Themen 9
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
B Java Swing "Zeichenfläche" Java Basics - Anfänger-Themen 1
O Alternative zum swing-Timer Java Basics - Anfänger-Themen 5
F Swing Applet: mehrere Komponenten hinzufügen Java Basics - Anfänger-Themen 1
F Platzieren von Komponenten in Swing Applet funktioniert nicht Java Basics - Anfänger-Themen 3
P Hintergrundbild in Swing einfügen Java Basics - Anfänger-Themen 3
C Swing frage Java Basics - Anfänger-Themen 8
T Rechenprogramm mit Swing Java Basics - Anfänger-Themen 3
K Swing Darstellungsproblem Java Basics - Anfänger-Themen 11
G Verständnisproblem mit swing Java Basics - Anfänger-Themen 6
P Swing - Blackscreen Java Basics - Anfänger-Themen 10
Y Random-Objekt und Swing Java Basics - Anfänger-Themen 4
M Klassen Hilfe bei SWING Java Basics - Anfänger-Themen 5
S GUI Problem: Swing Java Basics - Anfänger-Themen 8
M Javax.swing - Timer(2 Button) Java Basics - Anfänger-Themen 17
J Timer - Swing Java Basics - Anfänger-Themen 5
B Erste Schritte Primefaces -> Swing Gui Java Basics - Anfänger-Themen 7
T Swing, SWT oder JavaFX Java Basics - Anfänger-Themen 8
S Programmoberfläche mit Java-Swing - Herangehensweise Java Basics - Anfänger-Themen 20
E Fragen zu paintXXX in Swing Java Basics - Anfänger-Themen 7
D Erste Schritte bash-Befehl mit Swing ausführen Java Basics - Anfänger-Themen 8
A Alternative zum manuellen Swing programmieren?? Java Basics - Anfänger-Themen 4
S Android fuer Swing-Kenner..? Java Basics - Anfänger-Themen 6
J Swing Timer Java Basics - Anfänger-Themen 3
B Seltsamer Fehler in SWING anwendung Java Basics - Anfänger-Themen 2
D GPS Tracker Swing Java Basics - Anfänger-Themen 2
L Erste Schritte Swing oder SWT Paint mit Grafikkarte? Java Basics - Anfänger-Themen 7
B Einstieg in swing GUI Java Basics - Anfänger-Themen 7
S Swing Eingabe Erzwingen Java Basics - Anfänger-Themen 3
S Swing JTable Java Basics - Anfänger-Themen 7
Z Input/Output Programm mit Swing umsetzen Java Basics - Anfänger-Themen 6
K Eclipse wie Swing per Drag und Drop erstellen Java Basics - Anfänger-Themen 2
V Dropdown Button in einer GUI (Java Swing) Java Basics - Anfänger-Themen 12
S Swing, Gridbaglayout Panel in Panel;funzt nicht!! Java Basics - Anfänger-Themen 3
O swing komponenten werden nicht angezeigt Java Basics - Anfänger-Themen 6
S Swing, Panel über Hintergrundbild!! Java Basics - Anfänger-Themen 6
M Einfacher Swing Wizard Java Basics - Anfänger-Themen 3
E Swing FileWrite?? Java Basics - Anfänger-Themen 3
S Umlaute in Swing-GUI Java Basics - Anfänger-Themen 8
K Drop-down Menü (swing) Java Basics - Anfänger-Themen 4
M Swing Klasse auch per Kommandozeile starten? Java Basics - Anfänger-Themen 2
S JAVA Swing Eventlistener Java Basics - Anfänger-Themen 11
P Swing - Welche Klasse für ausgeben von Ergebnissen? Java Basics - Anfänger-Themen 3
V Swing Componenten werden auf Mac nicht angezeigt Java Basics - Anfänger-Themen 19
J Überfordert mit Swing Java Basics - Anfänger-Themen 5
B Baum > Baum-Swing Java Basics - Anfänger-Themen 4
B Bei Swing weg vom North-West-South-East-Prinzip Java Basics - Anfänger-Themen 2
F Werteübergabe in Swing Formularen (gui Builder) Java Basics - Anfänger-Themen 9
L Swing GridBagLayout Java Basics - Anfänger-Themen 3
J unterschied zwischen awt und swing Java Basics - Anfänger-Themen 6
C Swing i.V.m. Threads Java Basics - Anfänger-Themen 2
J XML Viewer for Swing Java Basics - Anfänger-Themen 6
Y Anfänger Hausaufgabe... Swing Java Basics - Anfänger-Themen 6
W Zeichnen in Swing Java Basics - Anfänger-Themen 7
B Swing Applikation mit mehreren Klassen Java Basics - Anfänger-Themen 2
C Swing, Buttons Wert zuweisen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben