# JApplet in Browserfenster maximieren



## TheMuh (28. Sep 2011)

ich habe zwar diverse Dinge ergoogelt und ausprobiert, aber so richtig will es nicht funktionieren....
ich schaffe es nicht, dass das JApplet auch in der Höhe den gesamten freien Browserbereich ausnutzt.. wie erreiche ich das bitte ?

Die HTML Seite:

```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>NOUS</title>
<meta name="author" content="Muh">
<meta name="editor" content="html-editor phase 5">
<style type="text/css" media="all">
html, body {
         background-color: #333333;
         margin: 0;
         padding: 0;
         height: 100%; /* WICHTIG!!! STRECKT ANZEIGENBEREICH AUF 100% */
}
#wrapper {
         background-color: #FFFFFF;
         width: 80%;
         margin: auto; /* Div soll zentriert werden */
         min-height: 100%; /* Mindesthöhe für moderne Browser */
         height:auto !important; /* Important Regel für moderne Browser */
         height:100%; /* Mindesthöhe für den IE */
         overflow: hidden !important; /* FF Scroll-leiste */
}
</style>
</head>
<body>
<div id="wrapper">
<APPLET CODE="Start.class" codebase="bin" height = "100%" width="100%">
</APPLET>
</div>
</body>
</html>
```

Die StartKlasse:

```
import javax.swing.JApplet;
import GUI.*;


public class Start extends JApplet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * @param args
	 */
	
	public void init() {
	  DesignBuilder.Start(getContentPane());
	}
	  .......
	
}
```

Die DesignBuilder Klasse:

```
import java.awt.*;
import javax.swing.*;

public class DesignBuilder {
	
	static void addComponent(Container cont, GridBagLayout gbl, Component c,
			int x, int y, int width, int height, double weightx, double weighty) {
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.fill = GridBagConstraints.BOTH;
		gbc.gridx = x;
		gbc.gridy = y;
		gbc.gridwidth = width;
		gbc.gridheight = height;
		gbc.weightx = weightx;
		gbc.weighty = weighty;
		gbl.setConstraints(c, gbc);
		cont.add(c);
	}
	
	public static void Start(Container a) {
		GridBagLayout gbl = new GridBagLayout();
		a.setLayout(gbl);

		addComponent( a, gbl, new JButton("1"), 0, 0, 2, 2, 1.0, 1.0 );
	    addComponent( a, gbl, new JButton("2"), 2, 0, 1, 1, 0  , 1.0 );
	    addComponent( a, gbl, new JButton("3"), 2, 1, 1, 1, 0  , 0   );
	    addComponent( a, gbl, new JButton("4"), 0, 2, 3, 1, 0  , 1.0 );
	    addComponent( a, gbl, new JButton("5"), 0, 3, 2, 1, 0  , 0   );
	    addComponent( a, gbl, new JButton("6"), 0, 4, 2, 1, 0  , 0   );
	    addComponent( a, gbl, new JButton("7"), 2, 3, 1, 2, 0  , 0   );
	}
}
```


----------



## L-ectron-X (28. Sep 2011)

Das JApplet hat von Hause aus das BorderLayout, was sich sehr gut dazu eignet, Elemente, automatisch auf volle Größe zu bringen. Wenn du nun das GridBagLayout setzt, kann es sein, dass sich der Inhalt, je nach gesetzten Parametern der GridBagConstraints nicht mehr auf volle Größe "aufblasen" kann.
Daher ist es besser, deine Klasse DesignBuilder von JPanel erben zu lassen, den Inhalt vom Layout her fertig zu erzeugen und dieses dann als Element des JApplets hinzuzufügen.


----------



## TheMuh (28. Sep 2011)

Erstmal vielen Dank für deine Antwort! ich werde das morgen mal in Ruhe ausprobieren


----------



## TheMuh (29. Sep 2011)

hmmmm leider passiert genau das selbe wenn ich ein JPanel erzeuge und dies dem JApplet übergebe ...
die Höhe lässt sich überhaupt nicht beeinflussen :/ ..ebenso verwundert mich das ich zwar ohne Fehlermeldung eine Size oder PreferedSize für das Panel einstellen könnte, es wird aber überhaupt nicht berücksichtigt, weder im Browser noch im Appletviewer ...
was versteh ich falsch ?

Die Java Klasse

```
import java.awt.*;

import javax.swing.*;

public class Start extends JApplet {

	private static final long serialVersionUID = 1L;

	public void init() {
	 
	  JPanel backpanel = new JPanel();
	  backpanel.setBackground(Color.BLUE);
	  getContentPane().add(backpanel);
	}
	  
}
```

Die dazugehörgie HTML Seite:

```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>.....</title>
<style type="text/css" media="all">
html, body {
         background-color: #333333;
         margin: 0;
         padding: 0;
         height: 100%; /* WICHTIG!!! STRECKT ANZEIGENBEREICH AUF 100% */
}
#wrapper {
         background-color: #FFFFFF;
         width: 80%;
         margin: auto; /* Div soll zentriert werden */
         min-height: 100%; /* Mindesthöhe für moderne Browser */
         height:auto !important; /* Important Regel für moderne Browser */
         height:100%; /* Mindesthöhe für den IE */
         overflow: hidden !important; /* FF Scroll-leiste */
}
</style>
</head>
<body>
<div id="wrapper">
<APPLET CODE="Start.class" codebase="bin" height = "100%" width="100%">
</APPLET>
</div>
</body>
</html>
```


Es scheint wohl eher ein HTML als ein Java Problem zu sein ....wenn ich in der HTML Datei feste Werte und keine Prozentwerte vergebe funktionierts .... aber wie kann ich das jetzt relativ zum verfügbaren Bereich programmieren ?


----------



## TheMuh (29. Sep 2011)

ok,  so funktionierts 


```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>.....</title>
<style type="text/css" media="all">
html {
         height:100%;
}

body {
         background-color: #333333;
         margin: 0;
         padding: 0;
         height: 100%;
}

* html body
{
 height:100%;
}

#wrapper {
         background-color: #FFFFFF;
         width: 80%;
         margin: auto;
         height: 100%;
         overflow: hidden !important;
}
</style>
</head>
<body>
<div id="wrapper">
<APPLET CODE="Start.class" codebase="bin" height = "100%" width="100%">
</APPLET>
</div>
</body>
</html>
```

trotzdem nochmals vielen Dank für die Hilfe!!!


----------



## L-ectron-X (29. Sep 2011)

Spätestens am Wochenende poste ich mal den Link (den ich jetzt nicht finde) zu einem Beispiel.


----------



## TheMuh (30. Sep 2011)

vielen Dank! kann ma dich irgendwo fürs Bundesverdienstkreuz oder so vorschlagen  *spässle mach*


----------



## TheMuh (30. Sep 2011)

also die HTML Seite skaliert das gesamte Applet jetzt schön ... notwendig ist es nun natürlich noch, das innerhalb des Java Applets die Inhalte passend skaliert werden. Ich habe das mal mit einem ComponentEvent auf dem ContentPane probiert, es funktioniert zwar grundsätzlich, jedoch nicht fehlerfrei; ab und zu wird nicht auf den gesamten Bereich skaliert usw ...

Kann man das irgendwie sauberer programieren ?

```
public class Start extends JApplet {

	private static final long serialVersionUID = 1L;
	private Image bgOrig, bgScaled;
	
	public void init() {
	  System.out.println("init");
	  setContentPane(new bgDrawing());
	  getContentPane().addComponentListener(new Scale());
	  
      try {
    	  bgOrig = ImageIO.read(new URL(getCodeBase(), "image.jpg"));
          
      }
      catch(IllegalArgumentException iae) {
	 JOptionPane.showMessageDialog(this, "Grafikdatei nicht gefunden!");
      }
      catch(IOException ioe) {
	 JOptionPane.showMessageDialog(this, "Fehler beim Einlesen der Grafikdatei!");
      }
      
	}
	  
	public void start() {
	  System.out.println("start");
	  new Scale();
	}
	  
	public void stop() {
	  System.out.println("stop");
	}
	  
	public void destroy() {
	  System.out.println("destroy");
	}
	
	class Scale implements ComponentListener {
		
		@Override
		public void componentHidden(ComponentEvent e) {
			It();
		}

		@Override
		public void componentMoved(ComponentEvent e) {
			It();
		}

		@Override
		public void componentResized(ComponentEvent e) {
			It();
		}

		@Override
		public void componentShown(ComponentEvent e) {
			It();
		}
		
		private void It () {
			bgScaled = bgOrig.getScaledInstance(
		     		 getContentPane().getWidth(),
		     		  getContentPane().getHeight(),
		     		    Image.SCALE_SMOOTH );
		}
	}
	
	private class bgDrawing extends JPanel {
		private static final long serialVersionUID = 1L;

		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			if (bgScaled != null) {
				g.drawImage(bgScaled, 0, 0, this);
			}
		}
	}	
}
```


----------



## L-ectron-X (1. Okt 2011)

Hier mal noch der versprochene Link: AppletResize-Applet

Auch wenn er dir nicht viel nutzen wird, da du nun ein völlig anderes Konzept vorgestellt hast.
Grundsätzlich ist deine Lösung mit dem ComponentListener richtig, würde ich auch so (ähnlich) machen.
Allerdings müsstest du noch mal näher erläutern, was genau in einem Fehlerfall passiert, also wenn nicht fehlerfrei skaliert wird.


----------



## TheMuh (5. Okt 2011)

getreu dem Motto Bilder sagen mehr als Worte hier ein Teilausschnitt meines Screens ...
Das Problem ist .. der weiße teil sollte eigentlich nicht sichtbar sein, das is der div tag welches das Java Applet eigentlich voll ausfüllen sollte .. manchmal klappts, manchmal muss man bissel rumspielen damits wird .. auf jeden Fall sind die weißen Teilbereiche falsch ... 

liegt es vielleicht daran das hier HTML und Java "gleichzeitig" skalieren und das irgendwie deswegen nicht ganz sauber geht ?


----------



## TheMuh (5. Okt 2011)

ich habe einfach einen "repaint();" nach der NeuSkalierung eingefügt und nun funktionierts wunderbar


----------

