Applet in Application umwandeln!

cubeless

Mitglied
Hallo!

Habe mir Tetris als Java-Applet gebaut und jetzt hätte ich es gern als Application.
Was muss ich dabei beachten? Was geschieht mit den Interfaces Runnable und KeyListener? Was mach ich mit meienr ehemlaigen init()-Methode und wo kommt die main()-Methode hin?
Vielen Dank im Voraus für eure Hilfe!

Grüße
 
Hallo,

da ist eigentlich nicht sehr viel Unterschied. Eine Applikation besitzt die Standartmethoden init(), start(), stop(), destroy() nicht. Dafür gibt es aber die main() Methode die den Startpunkt für dein Programm darstellt. Also das was du bisher in init() und start() implementiert hast gehört jetzt in das main() rein.

Wenns nicht funktioniert, kannste ja noch ein wenig mehr Details zu deinem Programm posten.


Vg Erdal
 
Ok, danke für die kleinen Hinweise.
Leider habe ich mich noch nicht näher mit Applications befasst.
Gibt es einen gebräuchlichen weg, wie man eine Application aufbaut? Von welcher Klasse erbt meine eigene Klasse? JWindow? JFrame? JPanel? Da habe ich leider keinen Überblick.
Wie ist das mit den Sachen in der paint()-Methode im Applet? Wo muss ich diese Dinge hinschreiben, damit in der Application ebenfalls gezeichnet wird? Benötige ich dazu ein Canvas?
Sorry für die vielen Fragen, aber dann weiß ich ein für alle mal bescheid.
Was mir auch helfen würde, wäre ein grundsätzlicher Aufbau-Plan solch einer Application, in der was gezeichnet werden kann.
Danke und Grüße
 
Hallo,

ich habe hier mal ein einfaches Applet schnell umgeschrieben zu einer Applikation und poste beide. Du kannst ja mal beide untersuchen.

Java:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class Analog extends Applet {

	private int c_x, c_y;

	private int radh, radms;

	private String name = "";

	private int x = 0;

	private int y = 0;

	public void init() {
		c_x = 100;
		c_y = 100;
		radh = 50;
		radms = 75;
		try {
			x = Integer.parseInt(getParameter("x"));
			y = Integer.parseInt(getParameter("y"));
		} catch (NumberFormatException e) {
		}

		if (getParameter("name") != null)
			name = getParameter("name");
	}

	public void start() {
		new Thread() {
			public void run() {
				while (true) {
					repaint();
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
					}
				}
			}
		}.start();
	}

	public void stop() {

	}

	public void destroy() {

	}

	public void paint(Graphics g) {
		int h_x, h_y, m_x, m_y, s_x, s_y;

		int h, m, s;

		Calendar cal = new GregorianCalendar();
		cal.setTimeInMillis(System.currentTimeMillis());

		h = cal.get(Calendar.HOUR);
		m = cal.get(Calendar.MINUTE);
		s = cal.get(Calendar.SECOND);

		h_x = (int) (radh * Math.sin(2 * Math.PI / 720 * (h * 60 + m)) + c_x);
		h_y = (int) (radh
				* Math.cos(2 * Math.PI / 720 * (h * 60 + m) + Math.PI) + c_y);

		m_x = (int) (radms * Math.sin(2 * Math.PI / 60 * m) + c_x);
		m_y = (int) (radms * Math.cos(2 * Math.PI / 60 * m + Math.PI) + c_y);

		s_x = (int) (radms * Math.sin(2 * Math.PI / 60 * s) + c_x);
		s_y = (int) (radms * Math.cos(2 * Math.PI / 60 * s + Math.PI) + c_y);

		g.setColor(Color.DARK_GRAY);

		g.fillOval(c_x - radms - 15, c_y - radms - 15, radms * 2 + 30,
				radms * 2 + 30);

		g.setColor(Color.LIGHT_GRAY);

		g.fillOval(c_x - radms - 10, c_y - radms - 10, radms * 2 + 20,
				radms * 2 + 20);

		g.setColor(Color.PINK);

		g.fillRect(c_x + 35, c_y - 10, 20, 20);

		g.setColor(Color.DARK_GRAY);

		g.drawString("" + cal.get(Calendar.DAY_OF_MONTH), c_x + 38, c_y + 5);
		g.drawString(name, c_x + x, c_y + y);
		g.fillOval(c_x - 3, c_y - 3, 6, 6);

		g.setColor(Color.BLUE);

		for (int i = 0; i < 60; i++)
			g
					.drawLine(
							(int) (80 * Math.sin(2 * Math.PI / 60 * i) + c_x),
							(int) (80 * Math
									.cos(2 * Math.PI / 60 * i + Math.PI) + c_y),
							(int) (85 * Math.sin(2 * Math.PI / 60 * i) + c_x),
							(int) (85 * Math
									.cos(2 * Math.PI / 60 * i + Math.PI) + c_y));

		g.setColor(Color.RED);

		for (int i = 0; i < 12; i++)
			g
					.drawLine(
							(int) ((radms + 2) * Math.sin(2 * Math.PI / 12 * i) + c_x),
							(int) ((radms + 2)
									* Math.cos(2 * Math.PI / 12 * i + Math.PI) + c_y),
							(int) ((radms + 10)
									* Math.sin(2 * Math.PI / 12 * i) + c_x),
							(int) ((radms + 10)
									* Math.cos(2 * Math.PI / 12 * i + Math.PI) + c_y));

		g.setColor(Color.YELLOW);

		for (int i = 1; i <= 12; i++)
			g.drawString("" + i, (int) (65 * Math.sin(2 * Math.PI / 12 * i)
					+ c_x - 5), (int) (65
					* Math.cos(2 * Math.PI / 12 * i + Math.PI) + c_y + 5));

		g.setColor(Color.BLUE);

		g.drawLine(c_x, c_y, h_x, h_y);
		g.drawLine(c_x, c_y, m_x, m_y);
		g.drawLine(c_x, c_y, s_x, s_y);
	}
}

Java:
import java.awt.Color;
import java.awt.Graphics;
import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.swing.JFrame;

public class ClockApplication extends JFrame {

	private int c_x, c_y;

	private int radh, radms;

	private String name = "";

	private int x = 0;

	private int y = 0;

	public ClockApplication() {
		super("Analoguhr");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setAlwaysOnTop(true);
		this.setLocationByPlatform(true);
		this.setSize(320, 480);

		c_x = 150;
		c_y = 250;
		radh = 50;
		radms = 75;

		this.setVisible(true);
	}

	public static void main(String[] args) {
		ClockApplication ca = new ClockApplication();
		ca.startClock();
	}

	public void startClock() {
		new Thread() {
			public void run() {
				while (true) {
					ClockApplication.this.repaint();
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
					}
				}
			}
		}.start();
	}

	public void paint(Graphics g) {
		int h_x, h_y, m_x, m_y, s_x, s_y;

		int h, m, s;

		Calendar cal = new GregorianCalendar();
		cal.setTimeInMillis(System.currentTimeMillis());

		h = cal.get(Calendar.HOUR);
		m = cal.get(Calendar.MINUTE);
		s = cal.get(Calendar.SECOND);

		h_x = (int) (radh * Math.sin(2 * Math.PI / 720 * (h * 60 + m)) + c_x);
		h_y = (int) (radh
				* Math.cos(2 * Math.PI / 720 * (h * 60 + m) + Math.PI) + c_y);

		m_x = (int) (radms * Math.sin(2 * Math.PI / 60 * m) + c_x);
		m_y = (int) (radms * Math.cos(2 * Math.PI / 60 * m + Math.PI) + c_y);

		s_x = (int) (radms * Math.sin(2 * Math.PI / 60 * s) + c_x);
		s_y = (int) (radms * Math.cos(2 * Math.PI / 60 * s + Math.PI) + c_y);

		g.setColor(Color.DARK_GRAY);

		g.fillOval(c_x - radms - 15, c_y - radms - 15, radms * 2 + 30,
				radms * 2 + 30);

		g.setColor(Color.LIGHT_GRAY);

		g.fillOval(c_x - radms - 10, c_y - radms - 10, radms * 2 + 20,
				radms * 2 + 20);

		g.setColor(Color.PINK);

		g.fillRect(c_x + 35, c_y - 10, 20, 20);

		g.setColor(Color.DARK_GRAY);

		g.drawString("" + cal.get(Calendar.DAY_OF_MONTH), c_x + 38, c_y + 5);
		g.drawString(name, c_x + x, c_y + y);
		g.fillOval(c_x - 3, c_y - 3, 6, 6);

		g.setColor(Color.BLUE);

		for (int i = 0; i < 60; i++)
			g
					.drawLine(
							(int) (80 * Math.sin(2 * Math.PI / 60 * i) + c_x),
							(int) (80 * Math
									.cos(2 * Math.PI / 60 * i + Math.PI) + c_y),
							(int) (85 * Math.sin(2 * Math.PI / 60 * i) + c_x),
							(int) (85 * Math
									.cos(2 * Math.PI / 60 * i + Math.PI) + c_y));

		g.setColor(Color.RED);

		for (int i = 0; i < 12; i++)
			g
					.drawLine(
							(int) ((radms + 2) * Math.sin(2 * Math.PI / 12 * i) + c_x),
							(int) ((radms + 2)
									* Math.cos(2 * Math.PI / 12 * i + Math.PI) + c_y),
							(int) ((radms + 10)
									* Math.sin(2 * Math.PI / 12 * i) + c_x),
							(int) ((radms + 10)
									* Math.cos(2 * Math.PI / 12 * i + Math.PI) + c_y));

		g.setColor(Color.YELLOW);

		for (int i = 1; i <= 12; i++)
			g.drawString("" + i, (int) (65 * Math.sin(2 * Math.PI / 12 * i)
					+ c_x - 5), (int) (65
					* Math.cos(2 * Math.PI / 12 * i + Math.PI) + c_y + 5));

		g.setColor(Color.BLUE);

		g.drawLine(c_x, c_y, h_x, h_y);
		g.drawLine(c_x, c_y, m_x, m_y);
		g.drawLine(c_x, c_y, s_x, s_y);
	}
}


Vg Erdal
 
Wow! Vielen Dank für das Klasse Beispiel mit der Uhr! Jetzt sind mir alle Unterschiede und veränderungen klar. Danke auch für den Link.

Jetzt habe ich noch eine Frage: Ich habe gelernt, dass man das Interface "Runnable" mit "implements" aufrufen muss. Warum ist das in beiden Fällen nicht nötig?

Grüße
 
Das Applet läuft leider noch nicht ganz rund, habe neulich was dran geändert und hatte keine Zeit, alles anzupassen. (habe leider nicht sehr objektorientiert gearbeitet). Ich richts' mal und dann schicke ich dir den Link. Am besten per PN, dann wird der Thread hier nicht ganz missbraucht ;-)
 
Zurück