Applet - Button "anbringen"

N302OO7

Mitglied
Hi

Es geht um folgendes Programm:

Java:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

  public class Rechtecke extends Applet implements Runnable, KeyListener {

    int x1=20;
    int x2=120;
    int y1=40;
    int y2=40;
    private Button button1 = new Button();

    public void init(){
      Panel cp = new Panel(null);
      cp.setBounds(0, 0, 300, 300);
      add(cp);
      setBackground (Color.WHITE);
      addKeyListener(this);
      button1.setBounds(64, 56, 129, 41);
      button1.setLabel("button1");
      button1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
          button1_ActionPerformed(evt);
        }
      });
      cp.add(button1);
    }
     public void button1_ActionPerformed(ActionEvent evt) {
       System.out.println("test");
     }
    public void start (){
      Thread th = new Thread (this);
      th.start();
    }
    public void run (){
      this.resize(200,500);
    }
    public void paint (Graphics g){
      g.setColor(Color.red);
      g.fillRect(x1,y1,20,20);
      g.fillRect(x2,y2,20,20);
      repaint();
    }
    public void keyPressed(KeyEvent s) {
      if (s.getKeyCode() == 40) y1 = y1+10;
      if (s.getKeyCode() == 38) y1 = y1-10;
      if (s.getKeyCode() == 83) y2 = y2+10;
      if (s.getKeyCode() == 87) y2 = y2-10;

    }
    public void keyTyped(KeyEvent s) { }
    public void keyReleased(KeyEvent s) { }

  }

Ich habe ein neues Applet geöffnet und dort dann mit Hilfe von AWT einen Button eingefügt (der Quelltext erschien automatisch). Den habe ich dann einfach in mein Programm (siehe oben) kopiert. Nun habe ich auch den Button wenn ich das Programm ausführe.

--> Frage: Wie kann ich das eigentlich Programm ausführen lassen, nachdem der Button gedrückt wurde Was muss ich in die Methode des Button schreiben



greez
 
Zuletzt bearbeitet:
Was heißt bei dir "Wie kann ich das eigentlich Programm ausführen lassen"? Das Applet ist schon nen eigenständiges Programm.
 
Ja sry, ich habe das ein wenig blöd formuliert. Also normalerweiße (d.h. ohne den Button) ist das Applet ein Programm in dem man 2 Vierecke mit den Tasten w/s bzw. Pfeiltaste up/down bewegen kann. Nun möchte ich gerne, dass beim starten des Applets erst ein Menu angezeigt wird in dem es mehrere Button gibt, z.B. "Spiel starten" "Beenden" usw. Wenn man auf Spiel starten klickt soll das Spiel, in dem Fall der Teil des Applets in dem man die Vierecke bewegen kann, starten. ich hoffe du hast jetzt verstanden was ich meine ;)


greez
 
Achso... ja, also spontan gesagt könntest du das so machen: Du erstellst ein Panel, das die Buttons beinhaltet. Wenn man auf "Spiel starten" klickt, dann wird das Panel gegen ein anderes Panel ausgetauscht und darauf sind dann die Klötze, die man verschieben kann.

Ob das funktioniert weiß ich nicht, müsste ich nacher mal ausprobieren, aber kannst du ja auch schon anfangen ^^

Und man braucht dafür sicherlich keinen Thread, vor allem nicht um die Größe zu ändern....
 
Also eigentlich habe ich ja gar kein Panel das habe ich jetzt nur erstellt um einen Button zu erstelen. Eigentlich habe ich nur ein Thread auf dem alles läuft. Klar ich könnte das kleine Programm jetzt schnell auf ein Panel umschreiben, aber es geht nicht um das Programm, ich habe ein ähnliches Programm (mit über 400 Zeilen Quellcode) das ich hier aber nicht posten möchte, und das ist vom Aufbau so wie das, dass ich ganz am Anfang oben gepostet habe.

deshalb möchte ich gerne wissen wie das so geht ...


GreeZ

Edit: ich muss jetz leider weg, aber es wäre nett, wenn ihr ein paar Lösungsverschläge & gleich Lösungen posten könntet. das ist sehr wichtig für mich, ich brauche das bis morgen... Ist mir leider ein bisschen spät eingefallen!
 
Zuletzt bearbeitet:
Wenn du nicht deinen eigentlichen Code posten willst, dann ist das zwar schön für dich, aber wir können dann auch nicht auf deinen Code abgestimmte Lösungen bieten.

Zu dem hier gepostetem Beispiel habe ich schon nen Vorschlag gemacht und damit du siehst, wie das aussehen könnte, habe ich die Sources mal hier veröffentlicht...

SpielApplet.java
Java:
package de.tutorials.n302oo7.spiel;

import java.applet.Applet;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SpielApplet extends Applet {
	private static final long serialVersionUID = 7065055301578318138L;

	private Panel menu = null;
	private Panel spiel = null;

	@Override
	public void init() {
		add(getMenuPanel());
	}

	private Panel getMenuPanel() {
		if(menu == null) {
			menu = new MenuPanel();
			menu.setBounds(0, 0, 300, 300);
			((MenuPanel)menu).addButton1ActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					System.out.println("Spiel starten...");

					// Panels tauschen
					SpielApplet.this.remove(menu);
					SpielApplet.this.add(getSpielPanel());
					getSpielPanel().requestFocus();
				}
			});
			((MenuPanel)menu).addButton2ActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					System.out.println("Spiel beenden...");
				}
			});
		}

		return menu;
	}

	private Panel getSpielPanel() {
		if(spiel == null) {
			spiel = new SpielPanel();
			spiel.setBounds(0, 0, 300, 300);
		}

		return spiel;
	}
}

MenuPanel.java
Java:
package de.tutorials.n302oo7.spiel;

import java.awt.Button;
import java.awt.Panel;
import java.awt.event.ActionListener;

public class MenuPanel extends Panel {
	private static final long serialVersionUID = 3314276435573597270L;

	private Button button1 = null;
	private Button button2 = null;

	public MenuPanel() {
		setLayout(null);

		button1 = new Button("Spiel starten");
		button1.setBounds(65, 55, 130, 40);
		add(button1);

		button2 = new Button("Beenden");
		button2.setBounds(65, 105, 130, 40);
		add(button2);
	}

	public void addButton1ActionListener(ActionListener listener) {
		button1.addActionListener(listener);
	}

	public void addButton2ActionListener(ActionListener listener) {
		button2.addActionListener(listener);
	}
}

SpielPanel.java
Java:
package de.tutorials.n302oo7.spiel;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.accessibility.Accessible;

public class SpielPanel extends Panel implements KeyListener {
	private static final long serialVersionUID = -3071346025067561629L;

	private int x1 = 20;
	private int x2 = 120;
	private int y1 = 40;
	private int y2 = 40;

	public SpielPanel() {
		setBackground(Color.blue);
		addKeyListener(this);
	}

	@Override
	public void keyPressed(KeyEvent s) {
		if(s.getKeyCode() == KeyEvent.VK_DOWN) y2 += 10;
		if(s.getKeyCode() == KeyEvent.VK_UP) y2 -= 10;
		if(s.getKeyCode() == KeyEvent.VK_S) y1 += 10;
		if(s.getKeyCode() == KeyEvent.VK_W) y1 -= 10;

		repaint();
	}

	@Override
	public void keyReleased(KeyEvent s) {
	}

	@Override
	public void keyTyped(KeyEvent s) {
	}

	@Override
	public void paint(Graphics g) {
		g.setColor(Color.red);
		g.fillRect(x1, y1, 20, 20);
		g.fillRect(x2, y2, 20, 20);
	}
}

Einen Thread braucht man nicht, jedenfalls nicht für dieses Beispiel. Ich hoffe du verstehst jetzt besser was ich meinte mit "Panels austauschen"...

Mag sein, dass das nicht die schönste Art ist das zu machen, aber etwas anderes ist mir auf die Schnelle nicht eingefallen...
 
Zuletzt bearbeitet:
Vielen Dank erstmal für deine Mühe.

Ich habe dir mein Programm mal per PM geschrieben, weil ich noch eine Frage dazu habe. Zu deinen Programmen:

Was bringt am Anfang das: private static final long serialVersionUID = 7065055301578318138L; ?
Was ist Accessible
Und wieso funktioniert es nicht wenn ich im 1. Programm System.out.println("Spiel beenden..."); mit System.exit(0); ersetzte, also dass das Programm geschlossen wird


greez
 
serialVersionUID ist für die Serialisierung da. Wenn ich in Eclipse den Source-Code aufräumen lasse, dann generiert Eclipse mir eine serialVersionUID, falls eine benötigt wird.

Accessible hab ich rausgenommen, das hatte ich übersehn. Das hatte ich so zum Spaß implementiert, aber da Panel das auch schon implementiert, ist es unnötig gewesen.

Und das mit dem Schließen... Naja, das ist ein Applet, wie willst du das schließen? So einfach mit System.exit(0); geht das nicht, falls das überhaupt geht.

Naja ich schau mal, was du mir da geschickt hast...
 
Zurück