Unterschiedliche Threads...Wie?

soweit ich das Verstehe erstellt das Codefragment eine Lokale AdapterKlasse ... der Sinn dieser Methode/Klasse ist einfach dass man schnell auf Fensterereignisse, wie zB Fenster schließen, reagieren kann.

Der Andere Weg wäre das Interface WindowListener zu implementieren und dann alle Methoden des Interfaces zu überschreiben od. eine Klasse von WindowAdapter ableiten und nur die Methoden überschreiben die man wirklich braucht.

Wie gesagt, lade dir das Handbuch der Java-Programmierung runter:
http://www.javabuch.de

Da wird das in Kapitel "28.2 Entwurfsmuster für den Nachrichtenverkehr" erklärt.
 
Hallo!

Den WindowAdapter zu benutzen ist eigentlich mehr oder weniger eine Sache der Bequemlichkeit ... der WindowAdapter implementiert das WindowListener Interface und behält leere Implementierungen für die im Interface definierten Methoden ... so kann ich mit meiner Ad-Hoc Implementierung von WindowAdapter durch ...
Code:
addWindowListener( new WindowAdapter(){
   public void windowClosing(WindowEvent evt){
     ....
   }
});

Arbeit sparen, da ich nur die Methoden implementieren muss, die ich brauche ...
Wenn ich das WindowListener Interface Ad-Hoc implementiere muss ich ALLE Methoden des Interfaces implementieren ...das ist mir zu Aufwendig, deshalb verwende ich die Adapter Klasse ...

mit WindowListener Interface müsstest du schrieben

Code:
       addWindowListener( new WindowListener(){

            public void windowActivated(WindowEvent e) {
                // TODO Auto-generated method stub
                
            }

            public void windowClosed(WindowEvent e) {
                // TODO Auto-generated method stub
                
            }

            public void windowClosing(WindowEvent e) {
                // TODO Auto-generated method stub
                
            }

            public void windowDeactivated(WindowEvent e) {
                // TODO Auto-generated method stub
                
            }

            public void windowDeiconified(WindowEvent e) {
                // TODO Auto-generated method stub
                
            }

            public void windowIconified(WindowEvent e) {
                // TODO Auto-generated method stub
                
            }

            public void windowOpened(WindowEvent e) {
                // TODO Auto-generated method stub
                
            }
            
            
        });

Das wäre dann doch etwas zu viel des guten ;-)

Allgemein: meistens implementieren AdapterKlassen ein bestimmtes Interface und stellen leere oder default Implementierungen zur Verfügung. Diese Adpaterklasse kann nun erweitert werden, und es müssen tatsächlich nur die Methoden implemtiert werden, die man braucht...



Gruß Tom
 
Also gut hm
nächstes problem :)
wollte einen KeyAdapter einfügen
mit R soll die Uhr laufen
und mit S soll sie stoppen
hab java.awt und java.awt.event importiert
und den konstruktor folgendermaßen umgeschrieben
public Clock2()
{
super("ClockShow");
addWindowListener
(new WindowAdapter()
{

public void windowClosing(WindowEvent evt)
{
stopClock();
setVisible(false);
dispose();
System.exit(0);
}
}
);
add KeyListener
(
new KeyAdapter()
{
public void keyPressed(KeyEvent event)
{
if(event.getKeyCode() == KeyEvent.VK_S)
{
stopClock();
}
if(event.getKeyCode() == KeyEvent.VK_R)
{
showClock();
}
}
}
);
hours = new NumberCounter(13);
minutes = new NumberCounter(60);
seconds = new NumberCounter(60);
upDate();
}
es lässt sich aber nicht mal compilieren
vielleicht kann mir wer sagen warum
 
Hallo!

Versuchs mal hiermit:

Code:
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Calendar;

import javax.swing.JFrame;

public class Clock2 extends JFrame implements Runnable {

	private NumberCounter hours;
	private NumberCounter minutes;
	private NumberCounter seconds;
	private boolean ampm;
	private String time;
	private boolean running;
	private boolean stopped;
	private Graphics g;

	public static void main(String[] args) {
		Clock2 clock = new Clock2();
		clock.SysTime();
		clock.showClock();
	}

	public Clock2() {
		super("ClockShow");

		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent evt) {
				stopClock();
				setVisible(false);
				dispose();
				System.exit(0);
			}
		});

		addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent evt) {
				int code =evt.getKeyCode(); 
				switch (code) {
					case KeyEvent.VK_R : //Start
						restartClock();
						break;
					case KeyEvent.VK_S : //stop
						stopClock();
						break;
					case KeyEvent.VK_X : //destroy
						destroyClock();
						System.out.println("Clock destroyed");
						break;
					default :
						;
				}
			}
		});

		setSize(320, 240);
		setVisible(true);
		g = this.getContentPane().getGraphics();
		hours = new NumberCounter(13);
		minutes = new NumberCounter(60);
		seconds = new NumberCounter(60);
		upDate();

	}
	public Clock2(int h, int m, int s, String amorpm) {
		hours = new NumberCounter(13);
		minutes = new NumberCounter(60);
		seconds = new NumberCounter(60);
		hours.setTime(h);
		minutes.setTime(m);
		seconds.setTime(s);
		if ((amorpm.equals("am")) || (amorpm.equals("pm"))) {
			if (amorpm.equals("am"))
				ampm = false;
			if (amorpm.equals("pm"))
				ampm = true;
		} else
			System.out.println("Geben sie bitte am oder pm ein");
		upDate();
	}
	public void tickSec() {
		seconds.count();
		if (seconds.getV() == 0) {
			minutes.count();
			if (minutes.getV() == 0)
				tickHour();
		}
		upDate();
	}
	public void tickMin() {
		minutes.count();
		if (minutes.getV() == 0)
			tickHour();
		upDate();
	}
	public void tickHour() {
		hours.count();
		if (hours.getV() == 0) {
			hours.setTime(1);
			if (ampm == true)
				ampm = false;
			else
				ampm = true;
		}
		upDate();
	}
	public String getTime() {
		return time;
	}
	private void setAP(String ap) {
		if (ap.equals("am"))
			ampm = false;
		if (ap.equals("pm"))
			ampm = true;
		upDate();
	}
	private String getAP() {
		if (ampm == false)
			return "am";
		else
			return "pm";
	}
	private void upDate() {
		time =
			hours.getValue()
				+ ":"
				+ minutes.getValue()
				+ ":"
				+ seconds.getValue()
				+ " "
				+ getAP();
	}
	public void SysTime() {
		Calendar cal = Calendar.getInstance();
		hours.setTime(cal.get(Calendar.HOUR_OF_DAY));
		minutes.setTime(cal.get(Calendar.MINUTE));
		seconds.setTime(cal.get(Calendar.SECOND));
	}

	public void showClock() {
		Thread t = new Thread(this);
		t.setPriority(Thread.MIN_PRIORITY);
		running = true;
		t.start();

	}
	public void stopClock() {
		stopped = true;
	}

	public void restartClock() {
		stopped = false;
	}

	public void destroyClock() {
		stopped = true;
		running = false;
	}
	/* (non-Javadoc)
	 * @see java.lang.Runnable#run()
	 */
	public void run() {
		// TODO Auto-generated method stub
		while (running) {
			while (!stopped) {

				g.clearRect(0, 0, 320, 240);
				g.drawString(time, 100, 30);
				System.out.println(time);
				try {
					Thread.sleep(1000);
				} catch (Exception e) {
					e.printStackTrace();
				}
				tickSec();
			}
			while (stopped && running) {
				try {
					Thread.sleep(1000);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}

		}
	}
}

Gruß Tom
 

Neue Beiträge

Zurück