# Größe von Applet



## Kebb (27. Oktober 2004)

Hallo!

Ich üb mich gerade mit Applets und such gerade eine Möglichkeit dessen Größe festzulegen. Also ich kann zwar im HTML dann größer machen aber ich hätte gerne eine größere "Arbeitsfläche" Ich hab schonmal was von setSize(), resize() gelesen, aber irgendwie läuft das nicht oder ich mach was falsch (ich geh mal vom letzteren aus )

Das Script sieht gerade so aus:


```
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class engine extends Applet {

  //Paint
  public void paint(Graphics g){
    
    g.drawString("test", 30, 30);
    
  }
}
```

Weis einer wie ich das machen könnte?


----------



## schnuffie (28. Oktober 2004)

Die Größe des Applets bekommst Du mit:


```
int w = this.getSize().width;
int h = this.getSize().height;
```
 
CU schnuffie


----------



## Kebb (28. Oktober 2004)

Ah danke..und wie ändere ich sie?


----------



## Thomas Darimont (28. Oktober 2004)

Hallo!

Schau mal hier:
http://www.javaworld.com/javaworld/javatips/jw-javatip80.html

Gruß Tom


----------



## Kebb (29. Oktober 2004)

Das geht aber irgendwie nicht innerhalb von Java..wenn ich starte (nicht als HTML sondern im JBuilder) bekomm ich immer ein Fenster mit dem Maßen 140x100 (so in etwa)...

Ich will es nicht in HTML größer machen, weil das dann streckt und ich fürs testen dann immer die HTML starten muss nachdem ich compiliert hab...


----------



## schnuffie (29. Oktober 2004)

Wenn das Applet in HTML eine vorgegebene Größe hat, sollte man sie auch so belassen. Wie würde es denn aussehen, wenn sich das Design der HTML-Seite beim Ändern innerhalb des Applets ändert? -echt besch...-

Besser würde da warscheinlich ein Applet sein, das mit w=0 und h=0 in der HTML-Seite eingebunden ist (also unsichtbar) und beim Laden automatisch einen Frame startet, der dann ähnlich wie ein Pop-Up-Fenster angezeigt wird. Desser Größe könntest Du mit setSize(...) beliebig anpassen.

CU schnuffie


----------



## Kebb (29. Oktober 2004)

Es soll sich ja nicht ständig ändern, ich will nur das das Applet die Größe von 800x600 hat und nicht die vorgegebenen 140x100. Das mit setSize habe ich auch schonmal ausprobiert, aber es noch nicht hinbekommen. Beim starten in JBuilder ist es dann teotzdem noch 140x100 :/ Kann mir einer mal bitte das setSize in den Code-Schnipsel oben einbauen?


----------



## Vincentius (29. Oktober 2004)

Hallo,

ich kenne zwar JBuilder nicht, aber ich bin mir sicher, dass man dort sowas wie Applet-Größe, einstellen kann. Suche einfach in Preferences oder so nach Applet-Einstellungen.


----------



## Kebb (30. Oktober 2004)

leider nein


----------



## Vincentius (31. Oktober 2004)

Du könntest ja auf eine andere IDE (z.B. Eclipse) umsteigen, die das kann.


----------



## schnuffie (31. Oktober 2004)

Soviel wie ich weiß, hat das nichts mit einer IDE zu tun. Applet-Abmessungen lassen sich nur (bin mir fast sicher) über die HTML-Seite festlegen. Die "setSize(...)"-Methode dürfte leer implementiert sein.

Wenn Du die Applet-Größe mit 800x600 festlegen willst, ist mir schleierhaft, wozu Du eine HTML-Seite im Hintergrund brauchst, die Du dann bei 800x600er Auflösung eh nicht mehr siehst.  

Mein Vorschlag wäre:

```
public class FrameApplet extends Applet {
 
public void init() {
Frame f = new Frame("Fenster");
f.setLayout(new FlowLayout());
f.add(new Label("Hallo hier bin ich"));
f.setSize(800,600);
f.setDefaultCloseOption(Frame.EXIT_ON_CLOSE);
}
 
public void start() {
f.setVisible(true);
}
 
}
```
 
CU schnuffie


----------



## Kebb (31. Oktober 2004)

Hmm, naja ich wollte es dann in einem Popup starten lassen, aber zu deinem Vorschlag:

JBuilder mag das irgendwie nicht, er sagt einen Fehler an bei dem EXIT_ON_CLOSE.
Und wie kann ich dann das paint in dem neuen Fenster ausführen?


----------



## schnuffie (31. Oktober 2004)

Hmm, mit dem "EXIT_ON_CLOSE" hast Du Recht. Das scheint's erst bei Swing zu geben. Ist aber halb so wild: Laß es erstmal weg.

Jede Komponente (so auch Frame) hat die Methode "paint(Graphics g)". Die kannst Du natürlich zum Zeichnen verwenden.
Die Arbeit mit LayoutManangern macht die Sache natürlich einfacher. Die richten z.B. Textfelder oder Buttons automatisch aus. Befaß Dich doch einfach mal damit.

CU schnuffie


----------



## Kebb (31. Oktober 2004)

lalalalaa

Ok, hmm......keine Ahnung wie's geht 

Wollt ich zwar nicht wegen den möglichen Reaktionen (auch berechtigte zum Teil denk ich mal) drauf aber ich sag einfach mal was ich vorhabe:

Also ich will kein Chat oder sonnstwas programmieren sondern, jetzt kommts, hab ich mir mal vorgenommen ein MMORPG zu programmieren. Jaja ich weis: Ich schaff das nicht alleine, ich kann nicht, weil ich gerade erst mit Java anfange, ich komm nicht weit etc. und was es da alles noch so für Einwände gibt  Aber ich habe mir viele Gedanken über die Umsetzung gemacht und will jetzt einfach mal aus der "Wuschtraum"-Phase rauskommen und einfach mal probieren wie weit ich komme. Ich will's in der Ansicht von oben machen da eine 3D-Engine denk ich mal ganz schön viel schwiriger sein würde.

Als erstes Ziel habe ich mir vorgenommen zu schaffen das ich rumlaufen kann, mich drehen kann, etwas sagen kann etc. Da da das Kooridinaten-System eine wichtige Rolle spiel wollte ich gleich zu Anfang erstmal die Arbeitsfläche von der Größe her festlegen, auf 800x600, und nicht dann in der HTML das skalieren was denk ich mal Probleme bringen könnte.

Eine einfache Bewegung ist schon möglich aber drehen, skalieren etc. geht noch nicht und es nagt ganzschön an der Performence, kann mir zufällig jemand ne Tip geben? 

Wenn ich es nicht schaffe, naja dann hab ich mir halt fürn Anfang zu viel vorgenommen, aber aus Fehlern lernt man ja bekanntlich 

Zuerst wollt ich's in Flash machen weil da das Arbeiten mit Objekten um Tonnen einfacher ist. Aber das macht Probleme, weil die Datenbank-Anbindung dort recht doof zu realisieren ist...

Der derzeitige Code:

```
package mmorpg;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.net.*;

public class engine extends Applet {

  //Variablen für Datenbank

  private int self_x = 100;
  private int self_y = 100;
  private int self_width = 50;
  private int self_height = 50;
  private int self_a = 90;
  private int self_say;






  //Datenbank-Aktionen






  //DoubleBuffer
  private Image dbImage;
  private Graphics dbg;

  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);
  }





  // Bewegung
  public boolean keyDown (Event e, int key)
  {
   if (key == Event.UP){
    self_y -= 1;
   }

   if (key == Event.DOWN){
    self_y += 1;
   }

   if (key == Event.LEFT){
    self_x -= 1;
   }

   if (key == Event.RIGHT){
    self_x += 1;
   }

   return true;
  }






  //Game
  Image player_img;

  public void init(){
    player_img = getImage (getCodeBase (), "mmorpg/images/player.gif");
  }
  
  public void paint(Graphics g){

    setBackground (Color.black);
    g.drawImage(player_img, self_x, self_y, this);

    repaint();
  }

}
```


----------



## schnuffie (31. Oktober 2004)

...ich find's eher Klasse, wenn sich Jemand ein größeres Projekt vornimmt. Klar, als blutiger Anfänger ist das eine Nummer zu groß.

Das mit dem Neuzeichnen ohne Flackern ist hier (http://download.javabuch.de/hjp3html.zip) im Java-Buch sehr gut beschrieben - ein ausgezeichnetes Buch, finde ich - und noch dazu kostenlos.

Schau mal unter dem Artikel "Doppelbufferung".

CU schnuffie


----------



## Kebb (31. Oktober 2004)

Doppelbuffer ist schon drinne, aber wenn ich z.B. Musik laufen habe und das Ding ausführe fängt die Muse an zu stottern :/

Aber danke für das Buch, werd ich mir bald mal vor die Nase halten!


----------



## schnuffie (31. Oktober 2004)

Hört sich nach "Riesenarbeit" für den Prozessor an.

Was hälst Du von dem Beispiel mit der Schlange: Nur das neu zeichnen, das sich auch ändert... (Javabuch)

CU schnuffie


----------



## Kebb (31. Oktober 2004)

Wo genau steht das?

Aber das Problem bei einem MMO ist das sind eigentlich immer etwas ändert, vorallem dann wenn sehr viele Spieler im Blickfeld sind...


----------



## Kebb (31. Oktober 2004)

Glaub ich habs gefunden:


```
public void update(Graphics g)
 {
   //Double-Buffer initialisieren
   if (dbImage == null) {
    dbImage = createImage(
      this.getSize().width,
     this.getSize().height
    );
    dbGraphics = dbImage.getGraphics();
   }
   //Hintergrund löschen
   dbGraphics.setColor(getBackground());
   dbGraphics.fillRect(
    0,
     0,
     this.getSize().width,
     this.getSize().height
   );
   //Vordergrund zeichnen
   dbGraphics.setColor(getForeground());
   paint(dbGraphics);
   //Offscreen anzeigen
   g.drawImage(dbImage,0,0,this);
 }
```

Aber wenn ich das Fenster wärend dem Ausführen bewege zieht es immernoch einen Schweif hinter sich her...


----------



## schnuffie (31. Oktober 2004)

Hmm, Du machst Dich!  

Noch ein bisschen Übung und Du schaffst das.


----------



## Tithilion (8. November 2008)

gibts das buch noch irgendwo zum download?


----------



## dzafelja (15. Oktober 2009)

Es gibt eine einfache Möglichkeit

überschreibe die init() Methode folgendermassen


```
public void init () {
  this.resize(width,height);
}
```

*Width z.b. 800 Height: 600 px*



Kebb hat gesagt.:


> Hallo!
> 
> Ich üb mich gerade mit Applets und such gerade eine Möglichkeit dessen Größe festzulegen. Also ich kann zwar im HTML dann größer machen aber ich hätte gerne eine größere "Arbeitsfläche" Ich hab schonmal was von setSize(), resize() gelesen, aber irgendwie läuft das nicht oder ich mach was falsch (ich geh mal vom letzteren aus )
> 
> ...


----------



## dzafelja (15. Oktober 2009)

```
/ The object we will use to write with instead of the standard screen graphics
     Graphics bufferGraphics;
     // The image that will contain everything that has been drawn on
     // bufferGraphics.
     Image offscreen;
     // To get the width and height of the applet.
     Dimension dim;
     int curX, curY;

     public void init() 
     {
          // We'll ask the width and height by this
          dim = getSize();
          // We'll redraw the applet eacht time the mouse has moved.
          addMouseMotionListener(this);
          setBackground(Color.black);
          // Create an offscreen image to draw on
          // Make it the size of the applet, this is just perfect larger
          // size could slow it down unnecessary.
          offscreen = createImage(dim.width,dim.height);
          // by doing this everything that is drawn by bufferGraphics
          // will be written on the offscreen image.
          bufferGraphics = offscreen.getGraphics();
     }
```



Kebb hat gesagt.:


> Glaub ich habs gefunden:
> 
> 
> ```
> ...


----------

