# Applet --> neues Fenster öffnen



## IceTi (7. Apr 2008)

Hi,

ich habe da eine Applet was ich mit Panels realisiere.
Nun möchte (nach klicken auf einen Button) ein neuen kleines Fenter öffnen (z.B: 300x200).

Wie mache ich das am besten ?
Mit JFrame?

Bin für jede Hilfe dankbar...


----------



## Maeher (7. Apr 2008)

IceTi hat gesagt.:
			
		

> Wie mache ich das am besten ?
> Mit JFrame?


Zum Beispiel, du musst nur beachten, dass bei Frames von Applets unten an deinem Fenster noch ein Sicherheitshinweis angezeigt wird (nimmt am unteren Rand ein wenig Platz weg, den du bei statischer Komponentenanordnung mit einplanen solltest).


----------



## Gast (7. Apr 2008)

Hm okay.
Kannst du mir (oder jemand anders) auch noch erklären wie ich so einen Frame starte?


----------



## L-ectron-X (7. Apr 2008)

http://www.java-forum.org/de/viewtopic.php?t=18460


----------



## IceTi (9. Apr 2008)

Das mit dem JFrame klappt unter Eclipse und dem Eclipse-Viewer wunderbar, doch im Applet im Browser leide nicht, da tut sich dann gar nicht wenn ich auf den entsprechenden Button drücke.

Folgendes Objekt wird erstellt wenn ich auf den Button "hinzufügen" klicke:


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

public class LokControl extends javax.swing.JApplet{
	
	private static final long serialVersionUID = 1L;
	private JFrame fenster;
        private JPanel pLokControl;
        private JRadioButton rVor, rRueck;
        private JCheckBox cF1, cF2, cF3, cF4;
        private JButton bNotAus;   
       private JSlider geschw;
    
    public LokControl(String Name){
        fenster = new JFrame(Name);
        fenster.setSize(375,175);
        fenster.setLocation(400,200);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.setLayout(null);
        fenster.setVisible(true);

        pLokControl = new JPanel();
    	pLokControl.setMinimumSize(new java.awt.Dimension(375, 175));
    	pLokControl.setBounds(0, 0, 375, 175);
    	pLokControl.setLayout(null);
    	
    	bNotAus =  new JButton();
    	bNotAus.setBackground(Color.red);
    	bNotAus.setBounds(275, 115, 80, 20);
        bNotAus.setText("NotAus");
        pLokControl.add(bNotAus);
        
        rVor = new JRadioButton();
        rVor.setBounds(200, 70, 100, 13);
        rVor.setText("Vorwärts");
        rVor.setSelected(true);

        pLokControl.add(rVor);
        
        rRueck = new JRadioButton();
        rRueck.setBounds(60, 70, 100, 13);
        rRueck.setText("Rückwärts");
        pLokControl.add(rRueck);
        
        cF1 = new JCheckBox();
        cF1.setText("Funktion 1");
        cF1.setFont(new java.awt.Font("Tahoma", 0, 12));
        cF1.setBounds(20, 100, 120, 15);
        pLokControl.add(cF1);

        cF2 = new JCheckBox();
        cF2.setText("Funktion 2");
        cF2.setFont(new java.awt.Font("Tahoma", 0, 12));
        cF2.setBounds(20, 120, 120, 15);
        pLokControl.add(cF2);
        
        cF3 = new JCheckBox();
        cF3.setText("Funktion 1");
        cF3.setFont(new java.awt.Font("Tahoma", 0, 12));
        cF3.setBounds(140, 100, 120, 15);
        pLokControl.add(cF3);

        cF4 = new JCheckBox();
        cF4.setText("Funktion 2");
        cF4.setFont(new java.awt.Font("Tahoma", 0, 12));
        cF4.setBounds(140, 120, 120, 15);
        pLokControl.add(cF4);
        
        geschw = new JSlider();
        geschw.setBounds(65, 20, 220, 40);
        geschw.setMaximum(14);
        geschw.setMinimum(0);
        geschw.setValue(0);
        geschw.setPaintTicks(true);
        geschw.setMajorTickSpacing(2);
        geschw.setToolTipText("Geschwindigkeits-Regler");
        geschw.setPaintLabels(true);

        pLokControl.add(geschw);
        fenster.getContentPane().add(pLokControl);
        pLokControl.setVisible(true);
        fenster.add(pLokControl);
        
        geschw.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
    			switch (geschw.getValue()) {
    			case 0:
    				rVor.setEnabled(true);
    				rRueck.setEnabled(true);
    				break;
    			default:
    				rVor.setEnabled(false);
					rRueck.setEnabled(false);
    			}
            } 
        });
        rVor.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	rRueck.setSelected(false);
            } 
        });
        rRueck.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	rVor.setSelected(false);
            } 
        });
        bNotAus.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	rVor.setSelected(true);
            	rRueck.setSelected(false);
            	cF2.setSelected(false);
            	cF2.setSelected(false);
            	cF2.setSelected(false);
            	cF2.setSelected(false);
            	cF1.setEnabled(false);
            	cF2.setEnabled(false);
            	cF3.setEnabled(false);
            	cF4.setEnabled(false);
            	rVor.setEnabled(false);
            	geschw.setValue(0);
            }
        });
    }
}
```


----------



## Maeher (9. Apr 2008)

Schau mal in die Konsole (normalerweiße Rechtsklick->Konsole im Browser)
Ich vermute, dass die Zeile


			
				IceTi hat gesagt.:
			
		

> ```
> fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
> ```


eine SecurityException auswirft. Ich würd mal versuchen, wie sich das Applet verhält, wenn du sie weglässt.


----------



## L-ectron-X (9. Apr 2008)

Stimmt, diese Zeile beendet die VM. Die Klasse wurde ja von einem Applet geladen. Applets dürfen aber die VM nicht beenden, zumindest nicht so lange, wie nicht nicht signiert sind.
Am besten durch DISPOSE_ON_CLOSE ersetzen, dann ist auch die Signierung vom Tisch.


----------



## IceTi (9. Apr 2008)

Cool, danke!
Hat geklappt


----------



## IceTi (9. Apr 2008)

Klappt soweit.

Nun eine weitere Frage, wie kann ich dem "Hauptprogramm" von dem aus der FRame gestartet wurde mitteilen wenn dieses weider geschlossen wird?


----------



## Maeher (9. Apr 2008)

Du kannst einen WindowListener im Hauptprogramm für dein Fenster registrieren.


----------



## IceTi (9. Apr 2008)

Okay werde mich darüber gleich mal schlau machen.

Sowas wie, das das Frame noch kurz einen WErt zurück gibt geht nicht ?


----------



## Maeher (9. Apr 2008)

Naja, du kannst natürlich auch eine Referenz auf das Hauptprogramm an das Fenster übergeben (beim Start), und dann beim Schließen des Fensters aus dem Fenster (bzw. einem Listener innerhalb der Fensterklasse) heraus eine extra Methode mit Parametern im Hauptprogramm aufrufen und so die Daten dorthin bringen.
*Edit:* es gibt dafür auch noch verschiedene Varianten, man könnte z.B. auch eine statische Methode im Hauptprog aufrufen, dann muss man die Instanz nicht übergeben, muss aber evtl. im Hauptprogramm mit statischen Variablen kämpfen etc.
Außerdem könntest du, wenn du das Fenster nur versteckst und nicht ganz wegwirfst natürlich weiterhin Daten regulär auslesen.


----------

