Hallo Leute,
habe neben einigen andren Klassen eine MainKlasse, in der ich per Konstruktor ein Fenster mit einigen Elementen und einem Menü erzeuge. In dem Menü gibt es einen Menüpunkt "look and feel", in diesem man durch Klicken auf ein JMenuItem das LaF ändern können soll.
Der ActionListener/Adapter funktioniert, da ich eine Ausgabe erhalte, die ich an dieser Stelle testesweise eingebaut habe. Die LaF-Ändern-Methode sollte eigentlich auch gehen, da ich das ganze mit einer try/catch Anweisung gemacht habe und keine Fehlermeldung erhalte. Einzig was nicht geht, scheint das tatsächliche Ändern zu sein. Bekomme keine gewünschte Windows-Metal-Motif Variante meines Fensters angezeigt, sondern lediglich den Standard und kleine Änderungen direkt im Menu, wenn ich z. B. auf Windows klicke. Allerdings nur auf dem Menüpunkt, den ich gerade dann angeklickt habe und auch in einer Variante, die mit Windows oder Motif reichlich wenig zu tun hat.
Was mache ich falsch?
Hier der Quellcode.
Danke für Eure Hilfe!
habe neben einigen andren Klassen eine MainKlasse, in der ich per Konstruktor ein Fenster mit einigen Elementen und einem Menü erzeuge. In dem Menü gibt es einen Menüpunkt "look and feel", in diesem man durch Klicken auf ein JMenuItem das LaF ändern können soll.
Der ActionListener/Adapter funktioniert, da ich eine Ausgabe erhalte, die ich an dieser Stelle testesweise eingebaut habe. Die LaF-Ändern-Methode sollte eigentlich auch gehen, da ich das ganze mit einer try/catch Anweisung gemacht habe und keine Fehlermeldung erhalte. Einzig was nicht geht, scheint das tatsächliche Ändern zu sein. Bekomme keine gewünschte Windows-Metal-Motif Variante meines Fensters angezeigt, sondern lediglich den Standard und kleine Änderungen direkt im Menu, wenn ich z. B. auf Windows klicke. Allerdings nur auf dem Menüpunkt, den ich gerade dann angeklickt habe und auch in einer Variante, die mit Windows oder Motif reichlich wenig zu tun hat.
Was mache ich falsch?
Hier der Quellcode.
Danke für Eure Hilfe!
Code:
package listener;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.basic.BasicOptionPaneUI.ButtonActionListener;
import javax.swing.text.JTextComponent;
import javax.swing.JComponent;
public class Fenster{
/**
* Dateiname: Fenster.java
* Compiler: Eclipse SDK 3.2.1
* Autor: Tobias Fickinger
* Erstellungsdatum: 17.04.07
* Letzte Änderung: 23.04.07
* Beschreibung des Moduls: Hauptprogramm zur Anzeige eines simplen Fensters ohne Ereignisse. Methoden werden größtenteils aus der Klasse FensterElemente bezogen
* Paket: fenster (zusammen mit: FensterElemente.java)
*/
public static void main(String[] args) {
// Instanzierung des Fensterobjekts
ReservierungsFenster fensterobjekt = new ReservierungsFenster();
// Sichtbarkeit festlegen
Menu menu = new Menu();
fensterobjekt.setJMenuBar(menu.setMenuBar());
fensterobjekt.setVisible(true);
}
}
class ReservierungsFenster extends JFrame{
private static final long serialVersionUID = 1L;
public JTextField nameField;
public JTextField emailField;
public JButton buttonOK;
public JTextArea textArea;
public String dateiPfad;
public String textAreaContent;
public ActionListener meinActionListener = new EventHandling();
// Konstruktoren
public ReservierungsFenster(){
// Konstruktoraufruf mit Parameter für Titelname des Fensters
this("Platzreservierung");
}
public ReservierungsFenster( String titel ){
super(titel);
setSize(420,400);
//Elemente holen
FensterElemente element = new FensterElemente();
// Gridbaglayout holen
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints constr = new GridBagConstraints();
// ContentPane holen
Container cpane = this.getContentPane();
cpane.setLayout (new BorderLayout());
// Panels holen und mit GridBagLayout versehen
JPanel topPanel = new JPanel();
JPanel downPanel = new JPanel ();
topPanel.setLayout(gbl);
downPanel.setLayout(gbl);
// Panel "oben" mit Elementen aus der Klasse FensterElemente füllen
//JLabel erstellen
constr.gridx = 1; //Spalte
constr.gridy = 0; //Zeile
constr.anchor = GridBagConstraints.CENTER;
topPanel.add(element.createJLabel("Sitzplatzreservierung"), constr);
//JLabel erstellen
constr.gridx = 0;
constr.gridy = 1;
constr.anchor = GridBagConstraints.EAST;
topPanel.add(element.createJLabel("Name"), constr);
//TextField erstellen
constr.gridx = 1;
constr.gridy = 1;
constr.anchor = GridBagConstraints.EAST;
nameField = element.createTextField(20);
topPanel.add(nameField, constr);
//JLabel erstellen
constr.gridx = 0;
constr.gridy = 2;
constr.anchor = GridBagConstraints.EAST;
topPanel.add(element.createJLabel("Email"), constr);
//TextField erstellen
constr.gridx = 1;
constr.gridy = 2;
constr.anchor = GridBagConstraints.EAST;
emailField = element.createTextField(20);
topPanel.add(emailField, constr);
//Button erstellen
constr.gridx = 2;
constr.gridy = 3;
constr.anchor = GridBagConstraints.WEST;
buttonOK = element.createButton("OK");
topPanel.add(buttonOK, constr);
EventHandling bl = new EventHandling();
buttonOK.addActionListener(bl);
//TextArea erstellen
constr.gridx = 1;
constr.gridy = 4;
constr.anchor = GridBagConstraints.CENTER;
textArea = element.createTextArea(3,19,textAreaContent);
topPanel.add(textArea, constr);
//Panel "unten" mit Elementen aus der Klasse FensterElemente füllen
//RadioButtons erstellen
constr.gridx = 0;
constr.gridy = 1;
constr.anchor = GridBagConstraints.WEST;
String[] title = new String[]{"Raucher", "Nichtraucher"};
boolean[] active = new boolean[]{ true, false};
downPanel.add(element.createRadioButtons(title, active), constr);
//ComboBox erstellen
constr.gridx = 1;
constr.gridy = 1;
constr.anchor = GridBagConstraints.NORTHWEST;
String[] content = new String[]{"Fensterplatz","Mittelgang","Loge","Schlafplatz"};
downPanel.add(element.createComboBox(content), constr);
//Leeres JLabel erstellen
constr.gridx = 2;
constr.gridy = 1;
constr.anchor = GridBagConstraints.WEST;
downPanel.add(element.createEmptyJLabel(30), constr);
//Checkboxen erstellen
constr.gridx = 3;
constr.gridy = 1;
constr.anchor = GridBagConstraints.EAST;
constr.gridwidth = GridBagConstraints.REMAINDER;
String[] inhalt = new String[]{"Handgepäck","Koffer"};
boolean[] status = new boolean[]{false,true};
downPanel.add(element.createCheckBox(inhalt,status), constr);
//Leeres JLabel erstellen
constr.gridx = 0;
constr.gridy = 2;
constr.anchor = GridBagConstraints.WEST;
downPanel.add(element.createEmptyJLabel(30), constr);
//Leeres JLabel erstellen
constr.gridx = 0;
constr.gridy = 3;
constr.anchor = GridBagConstraints.WEST;
downPanel.add(element.createEmptyJLabel(30), constr);
//Leeres JLabel erstellen
constr.gridx = 0;
constr.gridy = 4;
constr.anchor = GridBagConstraints.WEST;
downPanel.add(element.createEmptyJLabel(30), constr);
// fertige topPanel und downPanel auf cpane legen
cpane.add(topPanel, BorderLayout.NORTH);
cpane.add(downPanel, BorderLayout.SOUTH);
}
class EventHandling implements ActionListener{
public void actionPerformed(ActionEvent event){
if(event.getActionCommand().equals("OK")){
String contentEmailField = emailField.getText();
String contentNameField = nameField.getText();
System.out.println("Name: " + contentNameField +
"\nEmail: " + contentEmailField);
}
else if(event.getActionCommand().equals("Öffnen")){
fileDialogOpen();
}
else if(event.getActionCommand().equals("Speichern")){
fileDialogSave();
}
else if(event.getActionCommand().equals("Beenden")){
System.exit(0);
}
else if(event.getActionCommand().equals("Windows")){
System.out.println("Windows");
updateLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
else if(event.getActionCommand().equals("Metal")){
System.out.println("Metal");
updateLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
}
else if(event.getActionCommand().equals("Motif")){
System.out.println("Motif");
updateLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
}
else if(event.getActionCommand().equals("Autor")){
optionPane("Autor");
}
else if(event.getActionCommand().equals("Help")){
optionPane("Help");
}
}
}
public void fileDialogOpen(){
FileDialog dialogOpen = new FileDialog(this, "Datei laden...",FileDialog.LOAD);
dialogOpen.show();
dateiPfad = dialogOpen.getDirectory();
dateiPfad += dialogOpen.getFile();
if(dateiPfad == null){
return;
}
else{
textAreaContent = Datei.leseDaten(dateiPfad);
System.out.println(textAreaContent);
}
}
public void fileDialogSave(){
String inhalt = textArea.getText();
FileDialog dialogSave = new FileDialog(this, "Datei speichern...",FileDialog.SAVE);
dialogSave.show();
dateiPfad = dialogSave.getDirectory();
dateiPfad += dialogSave.getFile();
if(dateiPfad == null){
return;
}
System.out.println(inhalt);
Datei.schreibeDaten(dateiPfad, inhalt);
}
public void optionPane(String type){
if(type.equals("Autor")){
JOptionPane.showMessageDialog(this, "Autor: Tobias Fickinger\n\nErstellt am: 28.04.2007\n\nVersion: 0.1","Information",JOptionPane.INFORMATION_MESSAGE);
}
else if(type.equals("Help")){
JOptionPane.showMessageDialog(this, "1. Menüführung\n" +
"1.1 Datei\n" +
"\t1.1.1 Öffnen: Klicken Sie hier, um eine Datei zu öffnen\n" +
"\t1.1.2 Speichern: Klicken Sie hier, um eine Datei zu speichern\n" +
"\t1.1.3 Beenden: Klicken Sie hier, um das Programm zu beenden\n" +
"\t1.2 look&feel\n" +
"\t1.2.1 Windows: Windows-Ansicht\n" +
"\t1.2.2 Metal: Metal-Ansicht\n" +
"\t1.2.3 Motif: Motif-Ansicht\n" +
"\t1.3 Info\n" +
"\t1.3.1 Autor: Informationen zum Programm anzeigen\n" +
"\t1.3.2 Help: Hilfemenu anzeigen\n","Hilfemenü",JOptionPane.INFORMATION_MESSAGE);
}
}
public void updateLookAndFeel(String laf){
try{
UIManager.setLookAndFeel(laf);
SwingUtilities.updateComponentTreeUI(this);
}
catch(Exception xcpt){
System.out.println("Fehler beim Ändern des Look and Feel: " + xcpt.getLocalizedMessage());
}
this.pack();
}
}//Ende der Klasse ReservierungsFenster