Applet mit Graphics dynamisch vergrößern

Status
Nicht offen für weitere Antworten.

SmartGuy

Mitglied
Hab die ersten Anfänge eines Netzwerk Multiplayer Pong Spieles.
Das Spielfeld soll, dynamisch vergrößerbar sein.
hab das mit gridlayout und griddata versucht und dann mit grabExcessVerticalSpace = true, horizontalAlignment = GridData.FILL, verticalAlignment = GridData.FILL und grabExcessHorizontalSpace = true versucht. aber iwie wollte es nicht funktionieren.

Hab daher jetzt nochmal alles so wie es funktionierte, aber ohne dynamische Fenstergröße


Java:
package TestmitSocket;
import java.awt.*;
import java.awt.Color;
import java.awt.Graphics;

public class Spielfeld extends Dimension{
	
	private static final long serialVersionUID = 2L;
	private int width, height;	
	
	public Spielfeld(int width, int height){
		super(width, height);
		this.width = width;
		this.height = height; 
	}
	
	public void paint(Graphics g) {
			
			// Hintergrund schwarz
			g.setColor(Color.BLACK);
			g.fillRect(0, 0, width, height);
			
			// Weiße Balken oben und unten
			g.setColor(Color.WHITE);
			g.fillRect(0, 0, width, 10);
			g.fillRect(0, height-10, width, height);
			
			// Mittellinie
			g.fillRect(width/2-5, 0, 10, height);
			
			// Mittelkreis
			g.setColor(Color.WHITE);
			g.fillOval(width/2-20, height/2-20, 40, 40);
			g.setColor(Color.BLACK);
			g.fillOval(width/2-10, height/2-10, 20, 20);
		}
}

Java:
package TestmitSocket;
import java.applet.*;
import java.awt.*;
import java.io.IOException;
import java.net.Socket;
import	java.io.InputStreamReader;
import	java.io.BufferedReader;
import	java.io.OutputStreamWriter;
import	java.io.BufferedWriter;

public class PongAppletEcho extends Applet implements Runnable 
{
	// Initialisierung der Variablen	
	private static final long serialVersionUID = 1L; 
	//int speed_xtemp;	//temperärer Speicher, wenn man mit der Leertaste den Ball anhalten will (x-koordinate)
	//int speed_ytemp; 	//temperärer Speicher, wenn man mit der Leertaste den Ball anhalten will (y-koordinate)
	// Variablen für die Doppelpufferung zum Verhindern, dass der Ball nicht während des Fluges ruckelt
	private Image dbImage;
	private Graphics dbg;
	private Socket socket=null;
	private String address = "127.0.0.1";
	private TextField tx;
	private BufferedWriter writer;
	private BufferedReader reader;
	//private String answer;
	private Thread th;
	Spielfeld spielfeld = new Spielfeld (600,400);
	Ball b1 = new Ball(300,200,-7,7);
	Schlaeger s1 = new Schlaeger(6,300,10,100,Color.WHITE);
	
	//----------------------------------------------------------
	public void init() 
	{	
		setBackground(Color.WHITE); //weisse Hintergrundfarbe	
		try {
		      socket = new Socket(address, 9000);
		      writer= new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
		      reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		}
	    catch (IOException e) {
	      System.err.println("Exception: couldn't create stream socket");
	      System.exit(1);
	    }
	    tx = new TextField(20);
		tx.setLocation(20, 120);
		add(tx);
		this.setSize(600,400);
		setFocusable(true);
	}
	
	//------------------------------------------------------------
	public void start(){
		// Schaffen eines neuen Threads, in dem das Spiel läuft
		th = new Thread(this);
		// Starten des Threads
		th.start();	
	}
	
	//------------------------------------------------------------
	public void stop(){
		
		th=null;
		try {
			writer.close();
			reader.close();
			socket.close();
		}
	    catch (IOException e) {
	        System.err.println("Exception: I/O error trying to talk to server");
	      }
	}
	//------------------------------------------------------------
	public void destroy(){}
	//------------------------------------------------------------
	public boolean mouseMove(Event evt, int x, int y){
		if (s1.getY()+((s1.getHeight())/2)!=y && s1.getY() >= 5){
			s1.setY((int)(y-((s1.getHeight())/2)));
		}else if (s1.getY()+((s1.getHeight())/2)!=y && s1.getY()+(s1.getHeight())<= spielfeld.getHeight()-5){
			s1.setY((int)(y-((s1.getHeight())/2)));
		}
		
		//System.out.println("x-wert: " +x+ ", und y= "+y);
		return true;
	}

	//------------------------------------------------------------*/
	//Tastatur-Listener
	public boolean keyDown(Event e, int key) 
	{
		// Obere Cursortaste gedrückt
		if (key == Event.UP && s1.getY() >= 5) {
			// Ändern des Richtunsvektors so dass sich der Balken nach Oben bewegt  (Y - Position wird kleiner)
			s1.setY(s1.getY()-10);
		}
		// Untere Cursortaste gedrückt
		else if (key == Event.DOWN && s1.getY()+s1.getHeight()<= spielfeld.getHeight()-5) {
			// Ändern des Richtunsvektors so dass sich der Balken nach Unten bewegt (Y - Position wird grösser)
			s1.setY(s1.getY()+10);
		}
/*
		// PAUSE -> Space Taste gedrückt (hat den Wert 32!)
		else if (key == 32 && dx != 0) {
			// Stoppen des Balles (x_speed = 0)
			speed_xtemp = dx;
			speed_ytemp = dy;
			dx = 0;
			dy = 0;
		} else if (key == 32 && dx == 0) {
			// Ball fliegt mit vorheriger Geschwindigkeit weiter 
			dx = speed_xtemp;
			dy = speed_ytemp;
		} else {
			// Zusätzlich Ausgeben eines nicht behandelten Wertes auf die Standardausgabe (damit bekommt man die Werte der Tasten ausgegeben)
			System.out.println("Charakter: " + (char) key + " Integer Value: "+ key);
		}
	*/	
		// NICHT VERGESSEN, immer:
		return true;
		
	}
	
	//------------------------------------------------------------
	public void ballverhalten(Ball ball, Spielfeld spielfeld, Schlaeger schlaegerLinks){
	// Wenn der Ball den rechten Rand berührt, dann prallt er ab
	if (ball.getX()+ball.getRadius() >= spielfeld.getWidth())
	{
		ball.rwx();
		//System.out.println("prüfe erste Bedingung, bestehend aus 4 verknüpften &, erstes & ergibt .., zweites & ergibt ..");
	}
	
		
	//oberer Rand und unterer Rand
	else if ((ball.getY()+ball.getRadius() >= spielfeld.getHeight()-10) || (ball.getY()-ball.getRadius() <= 10))
	{
		ball.setDy(-(ball.getDy()));
	}			
	
	// Ball ist am linken Rand und berührt Balken
	else if (ball.getX()-ball.getRadius() <= schlaegerLinks.getX()+schlaegerLinks.getWidth()&& ball.getY() >= schlaegerLinks.getY() && ball.getY() <= schlaegerLinks.getY()+schlaegerLinks.getHeight())      
	{
		ball.rwx();
		System.out.println("Balken. Ball "+ball.getX()+" "+ball.getY()+ "balken "+schlaegerLinks.getX()+ " " +schlaegerLinks.getY());
	}
	
	else if ((ball.getX()-ball.getRadius() <= schlaegerLinks.getX()+schlaegerLinks.getWidth()) && (ball.getY()< schlaegerLinks.getY() || ball.getY()>schlaegerLinks.getY()+schlaegerLinks.getHeight())){	//wenn der Ball im linken Aus ist
		ball.neuerBall();
		System.out.println("linker rand.Ball ist an Position "+ball.getX()+" "+ball.getY()+ "balken "+schlaegerLinks.getX()+ " " +schlaegerLinks.getY());
	}
}

	//------------------------------------------------------------
	
	
	public void run() {
		// Erniedrigen der ThreadPriority um zeichnen zu erleichtern
		Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

		// Solange true ist läuft der Thread weiter
		while (true) {
			//System.out.println("Ball X: " +b1.getX()+" Y: "+b1.getY()+ " Balken X: " +s1.getX()+" Y: "+s1.getY());
			ballverhalten(b1,spielfeld,s1);
			b1.fliegen(); 
			
			
			repaint(); // Neuzeichnen des Applets
			/*try{
				answer=reader.readLine();
				tx.setText(answer);
				
			}
			catch (IOException e) {
			      System.err.println("Exception: I/O error trying to talk to server");
			}*/
			try {
				// Stoppen des Threads für in Klammern angegebene Millisekunden
				Thread.sleep(20);
			} catch (InterruptedException ex) {
				// braucht nix zu machen
			}

			// Zurücksetzen der ThreadPriority auf Maximalwert
			Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
		}
	}

	//------------------------------------------------------------
	//Update - Methode, Realisierung der Doppelpufferung zur Reduzierung des Bildschirmflackerns
	public void update(Graphics g) {
		// Initialisierung des DoubleBuffers
		if (dbImage == null) {
			dbImage = createImage(this.getSize().width, this.getSize().height);
			dbg = dbImage.getGraphics();
		}

		// Bildschirm im Hintergrund löschen
		dbg.setColor(getBackground());
		dbg.fillRect(0, 0, this.getSize().width, this.getSize().height);

		// Auf gelöschten Hintergrund Vordergrund zeichnen
		dbg.setColor(getForeground());
		paint(dbg);

		// Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
		g.drawImage(dbImage, 0, 0, this);
	}

	//------------------------------------------------------------
	public void paint(Graphics g) {
		spielfeld.paint(g);
		g.setColor(Color.WHITE); //Füllfarbe der zu zeichnenden Objekte (hier: Balken und Ball)
		//g.fillOval(x - radius, y - radius, 2 * radius, 2 * radius); //zeichen Ball
		s1.paint(g);
		b1.paint(g);
		
	}
}
 

L-ectron-X

Gesperrter Benutzer
Ich hoffe, ich habe dich richtig verstanden...
Der Browser ist der jenige, der dem Applet Platz zur Verfügung stellt. Da kannst du im Applet programmieren, was du willst, wenn im Applet-Tag nicht mehr zur Verfügung gestellt wird, passiert mit der Größe deines Applets gar nichts.

Außerdem würde ich nicht von Dimension erben, um dann zu zeichnen. Dimensions sind nicht weiter als Abmessungen. Wenn du da eine paint()-Methode implementierst verletzt die die OOP-Paradigmen.
Gezeichnet wird nur in Objekten, die von Component erben.
 
G

Gast2

Gast
Moin,

Du kannst irgendwie mittels JavaScript auf Properties des Applets zugreifen ... die Properties sagen JS wie groß das Applet darzustellen ist ... diese Abfrage musst Du nur zyklisch wiederholen

hand, mogel
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Grafikformat für AWT-Applet? AWT, Swing, JavaFX & SWT 0
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
T Applet Applet in JFrame einbinden AWT, Swing, JavaFX & SWT 8
C Applet Applet funktioniert in Eclipse aber nicht in Browser AWT, Swing, JavaFX & SWT 1
S Sandboxed Applet weiterhin moeglich..? AWT, Swing, JavaFX & SWT 5
S Oracle's neue Sicherheitseinstellungen zerstoeren mein Applet. Was tun? AWT, Swing, JavaFX & SWT 3
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
U CardLayout im Applet AWT, Swing, JavaFX & SWT 4
J Applet Applet Vererbung/Überladen AWT, Swing, JavaFX & SWT 5
G JavaFX mit ANT deployen als Applet AWT, Swing, JavaFX & SWT 3
S Applet Application 2 applet AWT, Swing, JavaFX & SWT 3
T Applet JTattoo Look and Feel AWT, Swing, JavaFX & SWT 5
T Signiertes Applet Urheber angeben AWT, Swing, JavaFX & SWT 5
S Applet Repaint AWT, Swing, JavaFX & SWT 3
B Java-Applet Parameter übergabe? AWT, Swing, JavaFX & SWT 2
M Applet mit Bildern AWT, Swing, JavaFX & SWT 2
T Applet in JSP einbinden AWT, Swing, JavaFX & SWT 4
R MouseEvent.getX() liefert in Applet Screen-Koordinate AWT, Swing, JavaFX & SWT 2
K Applet Wieso kann ich keine Array im Applet initialisieren AWT, Swing, JavaFX & SWT 13
A Applet Applet vom Web-Server aus aufrufen AWT, Swing, JavaFX & SWT 11
A Applet Applet startet nicht AWT, Swing, JavaFX & SWT 2
P Tatsächliche Größe für Applet AWT, Swing, JavaFX & SWT 3
B Applet Aus Applet signiertes jar mit externen libs erstellen AWT, Swing, JavaFX & SWT 9
S JDialog über Applet AWT, Swing, JavaFX & SWT 3
M Warum funktioniert mein Applet nicht? AWT, Swing, JavaFX & SWT 6
D Applet hintergrund wird nicht weiß AWT, Swing, JavaFX & SWT 2
R Applet JavaScript Methodenaufruf AWT, Swing, JavaFX & SWT 2
A Applet Animiertes gif in awt applet anzeigen AWT, Swing, JavaFX & SWT 11
X Applet Java Applet Datei Ausführung AWT, Swing, JavaFX & SWT 9
A Applet .gif in applet Image nicht animiert angezeigt AWT, Swing, JavaFX & SWT 4
A Applet Applet aus Code neu starten AWT, Swing, JavaFX & SWT 2
K Applet erkennt keine Frameverkleinerung AWT, Swing, JavaFX & SWT 5
S Applet funktioniert nach Browserreload nicht richtig AWT, Swing, JavaFX & SWT 2
T Applet Applet vs. WebStart AWT, Swing, JavaFX & SWT 4
S Applet starten AWT, Swing, JavaFX & SWT 4
K JTable im Browser nicht zu sehen - Applet AWT, Swing, JavaFX & SWT 6
B Applet Button oder Toolbar in einem Applet AWT, Swing, JavaFX & SWT 5
V Applet mit Bildbearbeitung AWT, Swing, JavaFX & SWT 3
V Applet Applet starten schlägt fehl AWT, Swing, JavaFX & SWT 2
W Button in Applet AWT, Swing, JavaFX & SWT 9
kniffel GUI-Applet JTable füllt Hintergrund völlig aus AWT, Swing, JavaFX & SWT 4
J Applet Java-Applet friert mit Firefox ein AWT, Swing, JavaFX & SWT 8
J Applet Tetris flackert AWT, Swing, JavaFX & SWT 9
F Applet Applet starten...(+Timer?) AWT, Swing, JavaFX & SWT 12
S [JAVA] JFrame in Applet/JApplet AWT, Swing, JavaFX & SWT 14
D Applet Applet das auf fremden Libraries basiert einbinden? AWT, Swing, JavaFX & SWT 20
M Applet wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
E Applet Neuen Tab aus Applet öffnen AWT, Swing, JavaFX & SWT 3
G Applet, Link ermitteln, dem der Benutzer gefolgt ist AWT, Swing, JavaFX & SWT 2
K Email versenden ueber Applet AWT, Swing, JavaFX & SWT 11
S Applet in JFrame einbinden AWT, Swing, JavaFX & SWT 6
S Button aktivieren (Applet) AWT, Swing, JavaFX & SWT 2
3 Applet Applet zeigt nur weiße Fläche AWT, Swing, JavaFX & SWT 15
B 2 Probleme (JFrame & Applet) AWT, Swing, JavaFX & SWT 7
A Programmieren einer Agenda mit einer Liste (als Applet und .txt zum Speichern) AWT, Swing, JavaFX & SWT 7
H applet Methode aus abstrakter Klasse aufrufen AWT, Swing, JavaFX & SWT 12
H Applet - Hilfedateien im Browser öffnen / eine Webseite laden AWT, Swing, JavaFX & SWT 6
O JPanel aus Applet starten AWT, Swing, JavaFX & SWT 3
O Applet-Steuerung mit Tastaturbefehlen AWT, Swing, JavaFX & SWT 3
F 4-Gewinnt als Applet AWT, Swing, JavaFX & SWT 24
F Applet vs Stand-Alone-Client AWT, Swing, JavaFX & SWT 3
B AWT Bild als Hintergrund im Applet AWT, Swing, JavaFX & SWT 2
D Probleme mit MouseWheelListener und JLayeredPane in Applet AWT, Swing, JavaFX & SWT 2
G Applet und Swing Anwendung AWT, Swing, JavaFX & SWT 2
S Applet - Aerger mit dem Hintergrundbild - JLabel und JTextfield AWT, Swing, JavaFX & SWT 7
F Applet zeigt Bilder nicht an AWT, Swing, JavaFX & SWT 5
R for-Schleife in Applet ausgeben AWT, Swing, JavaFX & SWT 3
S Bild wird auf Canvas in Applet nicht gezeichnet AWT, Swing, JavaFX & SWT 4
W Swing heapsort + Applet AWT, Swing, JavaFX & SWT 4
P Diagramm in einem Applet zeichnen AWT, Swing, JavaFX & SWT 4
M Java Applet JTable/JList AWT, Swing, JavaFX & SWT 6
L Einfache Layout Frage für Applet -> Was mache ich bloss falsch? AWT, Swing, JavaFX & SWT 2
K Alternative zu Applet mit HTML-Einbindung AWT, Swing, JavaFX & SWT 11
J Java-Applet beenden AWT, Swing, JavaFX & SWT 3
R Applet aus JFrame starten AWT, Swing, JavaFX & SWT 2
T Konfiguration speichern in Applet AWT, Swing, JavaFX & SWT 2
P Swing Roter Faden beim Applet GUI Programmieren AWT, Swing, JavaFX & SWT 2
T HTML Seite neu laden mittels Applet AWT, Swing, JavaFX & SWT 2
T Icon von Frame ändern - Applet AWT, Swing, JavaFX & SWT 2
T Java Applet beenden AWT, Swing, JavaFX & SWT 2
M Swing Butten & TextFields aus Applet im JFrame nicht sichtbar AWT, Swing, JavaFX & SWT 2
I Swing .Jar Datei - funktioniert - nun als Applet AWT, Swing, JavaFX & SWT 13
M AWT text im applet formatieren AWT, Swing, JavaFX & SWT 5
L Applet Frage AWT, Swing, JavaFX & SWT 25
1 Verständnisprobleme bei Java Applet AWT, Swing, JavaFX & SWT 13
B Unterschied JFrame/Applet AWT, Swing, JavaFX & SWT 12
T [Applet] startet in Eclipse aber nicht im Browser AWT, Swing, JavaFX & SWT 2
G JSlider in Applet AWT, Swing, JavaFX & SWT 4
P Swing Applet AWT, Swing, JavaFX & SWT 2
R problem mit bildanzeige in applet und main AWT, Swing, JavaFX & SWT 2
A Applet kommt offline nicht mit FileReader zurecht AWT, Swing, JavaFX & SWT 3
F Applet und Popup AWT, Swing, JavaFX & SWT 4
G Wie startet man ein Applet ? AWT, Swing, JavaFX & SWT 4
R Ein Applet von einem Applet öffnen lassen AWT, Swing, JavaFX & SWT 2
Z Applet ausblenden AWT, Swing, JavaFX & SWT 5
G JList wird in einem Applet nur teilweise aktualisiert AWT, Swing, JavaFX & SWT 12
P Applet darstellung von Textfeldern Problem AWT, Swing, JavaFX & SWT 3
I Applet --> neues Fenster öffnen AWT, Swing, JavaFX & SWT 11
I Applet mit Panels (so richtig, gehts besser?) AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben