# JApplet mit Look&Feel?



## PrincE (20. Aug 2010)

Hallo Leute 

Gibt es einen bestimmten Grund warum ich kein LookAndFeel bei einem JAppet zum Laufen bringe?


```
try
		{
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		}
		catch (ClassNotFoundException e){e.printStackTrace();} catch (InstantiationException e){e.printStackTrace();} catch (IllegalAccessException e){e.printStackTrace();} catch (UnsupportedLookAndFeelException e){e.printStackTrace();}
```

Ich hab schon bisschen rumm gegoggelt und Suchfunktion und so aber irgendwie scheint ja keiner meine Probleme zu haben.

Bei einem JFrame läuft alles problemfrei..


----------



## eRaaaa (20. Aug 2010)

Mhmm, normal sollte das bei einem Applet auch gehen.
Wird denn eine Exception geworfen? Woran erkennst du dass das Look&Feel nicht gesetzt wird? Was für Komponenten setzt du ein?
Nimbus ist auch erst ab Java6u10 mit an Board, vllt liegts daran, dann wäre wieder die Frage nach der Exception ..


----------



## PrincE (20. Aug 2010)

keine Exception kommt.

Ich weis es daher, weil ich Komponenten ganz normal wie auch beim JFrame verwende die aber beim JApplet nicht Design mäßig geändert werden und beim JFrame schon.
Andere ältere Look&Feel haben auch kein Effekt beim JApplet.


----------



## eRaaaa (20. Aug 2010)

Mach mal ein kleines Beispiel das man ausführen kann....wo setzt du denn das LookAndFeel? In der init-Methode?

```
public class Snippet extends JApplet {

	@Override
	public void init() {
		super.init();
		try {
			UIManager
					.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (UnsupportedLookAndFeelException e) {
			e.printStackTrace();
		}
		JPanel panel = new JPanel();
		panel.add(new JButton("Nimbus-Button"));
		add(panel);
	}
}
```

funzt bei mir....


----------



## PrincE (20. Aug 2010)

ich machs einfach ganz am Anfang in die Main das funktioniert beim JFrame aber beim JApplet nicht


```
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Starter
{
	public static Window oWindow;
	
	public static void main(String param[])
	{
		try
		{
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		}
		catch (ClassNotFoundException e){e.printStackTrace();} catch (InstantiationException e){e.printStackTrace();} catch (IllegalAccessException e){e.printStackTrace();} catch (UnsupportedLookAndFeelException e){e.printStackTrace();}
		
		oWindow = new Window();
		oWindow.setVisible(true);
	}
}
```

hier ist Window ein JApplet

ist ja misteriös bei mir Funktioniert dein Beispiel nicht


----------



## eRaaaa (20. Aug 2010)

Wa, wieso eine main-Methode?
How to Make Applets (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 21 Applets

Überschreibe die init-Methode deines Applets, die wird aufgerufen in einem Applet, nicht die main-Methode!!!! Mein Beispiel war auch nicht sonderlich elegant, zusätzlich wäre es dann wohl auch besser mit invokeLater() das Setzen auf den EDT zu legen.


----------



## PrincE (20. Aug 2010)

auch ohne main funktionierts nicht...


```
import java.awt.Color;
import java.awt.Font;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Window extends JApplet
{
	private static final long serialVersionUID = 1L;
	
	JPanel panelOberflaeche = new JPanel();
	JLabel labelAusgabe = new JLabel("Ausgabe: ");
	
	JTextField textfieldEingabeUbersetzung = new JTextField();
	JTextField textfieldLeseVokabel = new JTextField();
	
	JMenuBar menuBar;
	JMenu menuDatei;
	JMenu menuEinstellungen;
	
	JButton buttonNeustarten = new JButton();
	JButton buttonWeiter = new JButton(); 
	
	JComboBox comboboxTest = new JComboBox();
	
	@Override
    public void init() {
		
		System.out.println("qwe");
        super.init();
        try {
            UIManager
                    .setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }
	}
	
	public Window()
	{
		this.setLayout(null);
		this.setVisible(true);
		this.setBounds(0, 0, 862, 588);
		panelOberflaeche.setBounds(this.getBounds());
		panelOberflaeche.setLayout(null);
		
		menuBar = new JMenuBar();
		setJMenuBar(menuBar);
	
		menuDatei = new JMenu("Datei");
		menuEinstellungen = new JMenu("Einstellungen");
	    
	    menuBar.add(menuDatei);
		menuBar.add(menuEinstellungen);
	    
		JMenuItem menuItemNeueAbfrage = new JMenuItem("Neue Abfrage");
		JMenuItem menuItemNeustarten = new JMenuItem("Aktuelle Abfrage neustarten");
	    JMenuItem menuItemBeenden = new JMenuItem("Aktuelle Abfrage Beenden");
	    JMenuItem menuItemTon = new JMenuItem("Ton ein");
	    
	    menuDatei.add(menuItemNeueAbfrage);
	    menuDatei.add(menuItemNeustarten);
	    menuDatei.addSeparator();
	    menuDatei.add(menuItemBeenden);
	
	    menuEinstellungen.add(menuItemTon);
	    menuItemTon.setText("Ton aus");
		
	    textfieldLeseVokabel.setBounds(140, 140, 300, 100);
	    textfieldLeseVokabel.setEditable(false);
	    textfieldLeseVokabel.setFont(new Font("Arial",1,16));
	    textfieldLeseVokabel.setForeground(Color.blue);
	    textfieldLeseVokabel.setText("Flugzeug");
	    
		textfieldEingabeUbersetzung.setBounds(140,300,400,60);
		textfieldEingabeUbersetzung.setFont(new Font("Arial",1,16));
		textfieldEingabeUbersetzung.setForeground(Color.black);
		
		buttonNeustarten.setBounds(40, 480, 100, 40);
		buttonNeustarten.setText("neustarten");
		
		buttonWeiter.setBounds(200, 480, 100, 40);
		buttonWeiter.setText("weiter");
		
		comboboxTest.setBounds(20, 20, 200, 40);
		comboboxTest.addItem("qwe");

		this.add(panelOberflaeche);
		panelOberflaeche.add(labelAusgabe);
		panelOberflaeche.add(textfieldEingabeUbersetzung);
		panelOberflaeche.add(textfieldLeseVokabel);
		panelOberflaeche.add(buttonNeustarten);
		panelOberflaeche.add(buttonWeiter);
		panelOberflaeche.add(comboboxTest);
	}
}
```

macht kein Unterschied :/


----------



## eRaaaa (20. Aug 2010)

Grr 
Also init() wird AUTOMATISCH aufgerufen von dem Applet! Das ist die Einstiegsmethode, quasi die main, die rufst du ja auch nicht selbst auf normalerweise.([EDIT]: Ok haste schon bemerkt )
Dann könnte es auch helfen die Komponenten nicht direkt zu initialisieren, sondern erstmal nur zu deklarieren, das LookAndFeel setzen und dann zu initialisieren:

```
import java.awt.Color;
import java.awt.Font;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Window extends JApplet {
	private static final long serialVersionUID = 1L;

	JPanel panelOberflaeche;
	JLabel labelAusgabe;

	JTextField textfieldEingabeUbersetzung;
	JTextField textfieldLeseVokabel;

	JMenuBar menuBar;
	JMenu menuDatei;
	JMenu menuEinstellungen;

	JButton buttonNeustarten;
	JButton buttonWeiter;

	JComboBox comboboxTest;

	@Override
	public void init() {
		System.out.println("qwe");
		super.init();
		try {
			UIManager
					.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (UnsupportedLookAndFeelException e) {
			e.printStackTrace();
		}

		initComponents();
	}

	private void initComponents() {
		panelOberflaeche = new JPanel();
		labelAusgabe = new JLabel("Ausgabe: ");

		textfieldEingabeUbersetzung = new JTextField();
		textfieldLeseVokabel = new JTextField();

		buttonNeustarten = new JButton();
		buttonWeiter = new JButton();

		comboboxTest = new JComboBox();

		this.setLayout(null);
		this.setVisible(true);
		this.setBounds(0, 0, 862, 588);
		panelOberflaeche.setBounds(this.getBounds());
		panelOberflaeche.setLayout(null);

		menuBar = new JMenuBar();
		setJMenuBar(menuBar);

		menuDatei = new JMenu("Datei");
		menuEinstellungen = new JMenu("Einstellungen");

		menuBar.add(menuDatei);
		menuBar.add(menuEinstellungen);

		JMenuItem menuItemNeueAbfrage = new JMenuItem("Neue Abfrage");
		JMenuItem menuItemNeustarten = new JMenuItem(
				"Aktuelle Abfrage neustarten");
		JMenuItem menuItemBeenden = new JMenuItem("Aktuelle Abfrage Beenden");
		JMenuItem menuItemTon = new JMenuItem("Ton ein");

		menuDatei.add(menuItemNeueAbfrage);
		menuDatei.add(menuItemNeustarten);
		menuDatei.addSeparator();
		menuDatei.add(menuItemBeenden);

		menuEinstellungen.add(menuItemTon);
		menuItemTon.setText("Ton aus");

		textfieldLeseVokabel.setBounds(140, 140, 300, 100);
		textfieldLeseVokabel.setEditable(false);
		textfieldLeseVokabel.setFont(new Font("Arial", 1, 16));
		textfieldLeseVokabel.setForeground(Color.blue);
		textfieldLeseVokabel.setText("Flugzeug");

		textfieldEingabeUbersetzung.setBounds(140, 300, 400, 60);
		textfieldEingabeUbersetzung.setFont(new Font("Arial", 1, 16));
		textfieldEingabeUbersetzung.setForeground(Color.black);

		buttonNeustarten.setBounds(40, 480, 100, 40);
		buttonNeustarten.setText("neustarten");

		buttonWeiter.setBounds(200, 480, 100, 40);
		buttonWeiter.setText("weiter");

		comboboxTest.setBounds(20, 20, 200, 40);
		comboboxTest.addItem("qwe");

		this.add(panelOberflaeche);
		panelOberflaeche.add(labelAusgabe);
		panelOberflaeche.add(textfieldEingabeUbersetzung);
		panelOberflaeche.add(textfieldLeseVokabel);
		panelOberflaeche.add(buttonNeustarten);
		panelOberflaeche.add(buttonWeiter);
		panelOberflaeche.add(comboboxTest);
	}

}
```

grob so etwas....
EDIT 2: und setVisible(true) am Besten immer erst am Ende aufrufen ! Könnte auch helfen


----------



## PrincE (20. Aug 2010)

jo ich hab jetzt auch gemerkt das man init nicht aufrufen muss ^^

danke schön, ich musste nur noch unten repaint() danach ging alles ))


----------

