Java Menüleiste

Y

Yelssorc

Aktives Mitglied
Thread Starter
Dabei seit
09.12.2006
Beiträge
242
Reaktionspunkte
2
Hi,

ich habe ein Java-Programm auf einem WindoofRechner geschrieben. Funktioniert auch auf meinem MBP gut, nur die Menüleiste hätte ich gerne in der AppleMenüleiste ganz oben und nicht im Fenster selbst (so wie es bei Win üblich ist).

Kann mir jemand sagen wie ich das anstelle? Fenster und Menüs sind mit Swing erstellt.

Danke :)
 
mit der apple.laf.useScreenMenuBar property...

der jar bundler macht das auch für dich...
 
jar Bundler? Gibt's sowas auch in JBuilder 2005?
 
Hast du den Link gelesen? Wohl kaum. :cool:
 
Hab keinen Bock die jar aus der command line zu starten. Trotzdem danke :-(
 
dann mach dir mit jar bundler (ist bei xcode dabei bzw unter /usr/share/java/Tools/) eine app draus...
oder setz die properties im quelltext oder im jar...
 
Sorry, dass ich noch einmal nachfragen muss, aber ich habe mich darum noch nie gekümmert.

Wenn ich auf Windows entwickle, kann ich dann für mac properties setzen? Bei import com.apple.eawt.*; gibt es ne Fehlermeldung, weil ich die ja auf win nicht hab.
 
im property file des jar kannst du die doch auch setzen...

jbuilder sollte da doch eine maske oder option haben...
 
Ist zwar schon etwas älter der Thread, aber wenn's es jemand sucht:

Der folgende Code steht bei mir in der main-Methode.
Code:
try {
   System.setProperty("apple.laf.useScreenMenuBar", "true");
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
   // Fehlerbehandlung
}
 
der thread is zwar etwas älter, aber ich hab mal ne frage zum erstellen von fenstern. und der thread erschien mir am passendsten ..

ich hab hier ne kleine applikation, mit der man später aufträge verwalten und bearbeiten kann (is für die FH als prüfung).

unter WinXP is soweit alles klar. wenn die app unter Mac OS X ausführe, passiert zwar der aufruf, ich seh auch ein fenster (zumindest den frame), aber sonst is da nix drin. keine menüleiste, keine eingabefelder nada...nur ein metallfarbener frame mit den drei knöpfen (x) (-) (+) in den bekannten farben.

gibt's da ne spezielle lib-die ich importieren muß? wenn ja welche? welche weiteren besonderheiten sind noch zu beachten?


danke

Naph
 
Hab keinen Bock die jar aus der command line zu starten. Trotzdem danke :-(

Also ich würde es so machen

PHP:
import.com.apple.mrj.*;

public class AWTDingsiBumsi extends JFrame implements MRJAboutHandler , OpenApplicationHandler, .......
                         
......
......
......
if(Sys.isMacOSX()){
  
MRJApplicationUtils.registerAboutHandler(this);
MRJApplicationUtils.registerOpenApplicationHandler(this);
MRJApplicationUtils.registerOpenDocumentHandler(this);
MRJApplicationUtils.registerAboutHandler(this);
.........
}
 
der thread is zwar etwas älter, aber ich hab mal ne frage zum erstellen von fenstern. und der thread erschien mir am passendsten ..

ich hab hier ne kleine applikation, mit der man später aufträge verwalten und bearbeiten kann (is für die FH als prüfung).

unter WinXP is soweit alles klar. wenn die app unter Mac OS X ausführe, passiert zwar der aufruf, ich seh auch ein fenster (zumindest den frame), aber sonst is da nix drin. keine menüleiste, keine eingabefelder nada...nur ein metallfarbener frame mit den drei knöpfen (x) (-) (+) in den bekannten farben.

gibt's da ne spezielle lib-die ich importieren muß? wenn ja welche? welche weiteren besonderheiten sind noch zu beachten?


danke

Naph


hast du den frame auf resizable gesetzt????

erscheint der inhalt, wenn du die grösse des frames veränderst?

eventuell magst du den gui code mal posten damit man sich dem problem annehmen kann
 
nö...der frame bzw. eigentlich das Panel hat feste größen. und der inhalt erscheint trotz allem nicht.

aber außer nem leeren Panel und einem menüpunkt in der menüleiste wird nichts weiter ausgeführt.

code GUI...hilft das weiter?


das ist eine der beiden klassen in denen die fenster erzeugt werden.
Code:
package auftragsverwaltung.p;
import java.awt.event.*;	
import javax.swing.*;
import auftragsverwaltung.p.artikel.*;
import auftragsverwaltung.p.geschaeftspartner.*;

/**
 * @version 0.20
 * @author Naphaneal
 * Erzeugt ein Exemplar der Klasse AuftragsverwaltungDIF. Ein Hauptmenue-Fenster mit Untermenuepunkten wird erzeugt.
 */
public class AuftragsverwaltungDIF extends JFrame implements ActionListener
{
	/** 
	 * Menuebalken Hauptmenue 
	 */
	private JMenuBar auftragsverwaltungDHM;
	
	/**
	 * Fenster Geschaeftspartner bearbeiten
	 */
	private JDialog gpBearbDAF;
	
	/** 
	 * Untermenue Bearbeiten 
	 */
	private JMenu bearbeitenDUM;
	
	/** 
	 * Menuepunkt Bearbeiten eines Geschaeftspartners
	 */
	private JMenuItem geschaeftspartnerDMB;
	
	/** 
	 * Menuepunkt Bearbeiten eines Artikel 
	 */
	private JMenuItem artikelDMB;
	
	/** 
	 * Menuepunkt Bearbeiten eines Auftrags 
	 */
	private JMenuItem auftragDMB;
	
	/** 
	 * Untermenue Auswertungen
	 */
	private JMenu auswertenDUM;
	
	/** 
	 * Menuepunkt Umsatzauswertung 
	 */
	private JMenuItem umsatzDMB;
	
	/** 
	 * Untermenue Ausfuehrung 
	 */
	private JMenu beendenDUM;
	
	/** 
	 * Menuepunkt Beenden 
	 */
	private JMenuItem beendenDMB;
	
	/**
	 * Festerbreite, -hoehe, und Koordinaten des Fensters
	 */
	private final int BREITE = 600,
	HOEHE = 400,
	X0 = 60,
	Y0 = 40;
		
	/**
	 * 
	 * Konstruktor
	 */
	public AuftragsverwaltungDIF()
	{
		super("Auftragsverwaltung"); 
		setDefaultCloseOperation(EXIT_ON_CLOSE); //programmende, wenn fenster geschlossen
		setSize(BREITE,HOEHE); 					//fenstergroesse setzen
		setLocation(X0,Y0);						//ausgangsposition des fensters setzen
		setVisible(true);
		menueZusammenbauen();
		verwanzen();
	}
		
	/**
	 * erzeugt ein DialogHauptMenue mit DialogUnterMenues
	 */
	public void menueZusammenbauen()
	{
		// Hauptmenue erzeugen
		auftragsverwaltungDHM = new JMenuBar();
		setJMenuBar(auftragsverwaltungDHM);
	
		// Menue: Bearbeitungsanwendungen
		bearbeitenDUM = new JMenu("Bearbeiten");
		auftragsverwaltungDHM.add(bearbeitenDUM);
			
		// Menue: Auswerten
		auswertenDUM = new JMenu("Auswerten");
		auftragsverwaltungDHM.add(auswertenDUM);
			
		//Menue: Beenden
		beendenDUM = new JMenu("Beenden");
		auftragsverwaltungDHM.add(beendenDUM);
			
		// Menuepunkt: Auftrag bearbeiten
		auftragDMB = new JMenuItem("Auftrag");
		auftragDMB.setAccelerator(KeyStroke.getKeyStroke('T',InputEvent.CTRL_MASK));
		bearbeitenDUM.add(auftragDMB);
			
		// Menuepunkt: Artikeldaten bearbeiten
		artikelDMB = new JMenuItem("Artikel");
		artikelDMB.setAccelerator(KeyStroke.getKeyStroke('P', InputEvent.CTRL_MASK));
		bearbeitenDUM.add(artikelDMB);
			
		// Menuepunkt: Geschaeftspartner bearbeiten
		geschaeftspartnerDMB = new JMenuItem("Geschaeftspartner");
		geschaeftspartnerDMB.setAccelerator(KeyStroke.getKeyStroke('A',InputEvent.CTRL_MASK));
		bearbeitenDUM.add(geschaeftspartnerDMB);
			
		// Menuepunkt: Auftrag beenden
		beendenDMB = new JMenuItem("Beenden");
		beendenDMB.setAccelerator(KeyStroke.getKeyStroke('B',InputEvent.CTRL_MASK));
		beendenDUM.add(beendenDMB);
			
			
		// Menuepunkt: Umsatz auswerten
		umsatzDMB = new JMenuItem("Umsatz");
		umsatzDMB.setAccelerator(KeyStroke.getKeyStroke('U',InputEvent.CTRL_MASK));
		auswertenDUM.add(umsatzDMB);
	}
	
		/**
		 * 
		 * Methode zum  "Verwanzen" der DialogAusloeseSchalter. Wartet auf eine stattfindende Aktion
		 */
	public void verwanzen()
	{
		// Menuepunkt: Geschaeftspartner bearbeiten
		geschaeftspartnerDMB.addActionListener(this);
				
		// Menuepunkt: Artikeldaten bearbeiten
		artikelDMB.addActionListener(this);
			
		// Menuepunkt: Auftrag bearbeiten
		auftragDMB.addActionListener(this);
			
		// Menuepunkt: Umsatz auswerten
		umsatzDMB.addActionListener(this);

		// Menuepunkt: beenden
		beendenDMB.addActionListener(this);
	}

	/**
	 * Umleiten einer Eingabe auf Informationsfenster, wenn Ausfuehrung der entsprechenden Funktion nicht moeglich.	
	 */
	
	public void actionPerformed(ActionEvent e)
	{
		if (e.getSource() == auftragDMB) 
		{
			JOptionPane.showMessageDialog(this, "Anwendung \"Auftrag bearbeiten\" noch in Arbeit","Baustelle",JOptionPane.INFORMATION_MESSAGE);
		} 
				
		if (e.getSource() == geschaeftspartnerDMB) 
		{
			gpBearbDAF = new GeschaeftspartnerBearbDAF();
		}
			
		if (e.getSource() == artikelDMB)
		{
			JOptionPane.showMessageDialog(this,"Anwendung \"Artikel bearbeiten\"noch in Arbeit","Baustelle",JOptionPane.INFORMATION_MESSAGE);
		}
		
		if (e.getSource() == umsatzDMB)
		{
			JOptionPane.showMessageDialog(this, "Anwendung \"Umsatz auswerten\" noch in Arbeit","Baustelle", JOptionPane.INFORMATION_MESSAGE);
		}
		
		else if (e.getSource() == beendenDMB)
		{
			setVisible(false);
			dispose();
		}
		
	}
}

die andere klasse kann ich nicht posten, die hat zuviele zeichen.
 
Zuletzt bearbeitet:
HTML:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

/**
 * @version 0.20
 * @author Naphaneal
 * Erzeugt ein Exemplar der Klasse AuftragsverwaltungDIF. Ein Hauptmenue-Fenster mit Untermenuepunkten wird erzeugt.
 */
public class MainFrame extends JFrame implements ActionListener
{


    public MainFrame()
    {
        super();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
        setResizable(true);
        setSize(600,400);                     //fenstergroesse setzen
        initComponents();
    }

    
    private void initComponents(){

        Container contentPane = getContentPane();
        contentPane.setLayout(new GridBagLayout());
        ((GridBagLayout)contentPane.getLayout()).columnWidths = new int[] {600, 0};
        ((GridBagLayout)contentPane.getLayout()).rowHeights = new int[] {400, 0};
        ((GridBagLayout)contentPane.getLayout()).columnWeights = new double[] {0.0, 1.0};
        ((GridBagLayout)contentPane.getLayout()).rowWeights = new double[] {0.0, 1.0};
        setLocationRelativeTo(getOwner());

        menueZusammenbauen();
    }

    public void menueZusammenbauen()
    {
        // Hauptmenue erzeugen
        auftragsverwaltungDHM = new JMenuBar();
        setJMenuBar(auftragsverwaltungDHM);

        // Menue: Bearbeitungsanwendungen
        bearbeitenDUM = new JMenu("Bearbeiten");
        auftragsverwaltungDHM.add(bearbeitenDUM);

        // Menue: Auswerten
        auswertenDUM = new JMenu("Auswerten");
        auftragsverwaltungDHM.add(auswertenDUM);

        //Menue: Beenden
        beendenDUM = new JMenu("Beenden");
        auftragsverwaltungDHM.add(beendenDUM);

        // Menuepunkt: Auftrag bearbeiten
        auftragDMB = new JMenuItem("Auftrag");
        auftragDMB.setAccelerator(KeyStroke.getKeyStroke('T',InputEvent.CTRL_MASK));
        bearbeitenDUM.add(auftragDMB);

        // Menuepunkt: Artikeldaten bearbeiten
        artikelDMB = new JMenuItem("Artikel");
        artikelDMB.setAccelerator(KeyStroke.getKeyStroke('P', InputEvent.CTRL_MASK));
        bearbeitenDUM.add(artikelDMB);

        // Menuepunkt: Geschaeftspartner bearbeiten
        geschaeftspartnerDMB = new JMenuItem("Geschaeftspartner");
        geschaeftspartnerDMB.setAccelerator(KeyStroke.getKeyStroke('A',InputEvent.CTRL_MASK));
        bearbeitenDUM.add(geschaeftspartnerDMB);

        // Menuepunkt: Auftrag beenden
        beendenDMB = new JMenuItem("Beenden");
        beendenDMB.setAccelerator(KeyStroke.getKeyStroke('B',InputEvent.CTRL_MASK));
        beendenDUM.add(beendenDMB);


        // Menuepunkt: Umsatz auswerten
        umsatzDMB = new JMenuItem("Umsatz");
        umsatzDMB.setAccelerator(KeyStroke.getKeyStroke('U',InputEvent.CTRL_MASK));
        auswertenDUM.add(umsatzDMB);


        // Menuepunkt: Geschaeftspartner bearbeiten
        geschaeftspartnerDMB.addActionListener(this);

        // Menuepunkt: Artikeldaten bearbeiten
        artikelDMB.addActionListener(this);

        // Menuepunkt: Auftrag bearbeiten
        auftragDMB.addActionListener(this);

        // Menuepunkt: Umsatz auswerten
        umsatzDMB.addActionListener(this);

        // Menuepunkt: beenden
        beendenDMB.addActionListener(this);
        pack();
           

    }

    /**
     * Umleiten einer Eingabe auf Informationsfenster, wenn Ausfuehrung der entsprechenden Funktion nicht moeglich.
     */

    public void actionPerformed(ActionEvent e)
    {
        if (e.getSource() == auftragDMB)
        {
            JOptionPane.showMessageDialog(this, "Anwendung \"Auftrag bearbeiten\" noch in Arbeit","Baustelle",JOptionPane.INFORMATION_MESSAGE);
        }

        if (e.getSource() == artikelDMB)
        {
            JOptionPane.showMessageDialog(this,"Anwendung \"Artikel bearbeiten\"noch in Arbeit","Baustelle",JOptionPane.INFORMATION_MESSAGE);
        }

        if (e.getSource() == umsatzDMB)
        {
            JOptionPane.showMessageDialog(this, "Anwendung \"Umsatz auswerten\" noch in Arbeit","Baustelle", JOptionPane.INFORMATION_MESSAGE);
        }

        else if (e.getSource() == beendenDMB)
        {
            setVisible(false);
            dispose();
        }

    }

/**
     * Menuebalken Hauptmenue
     */
    private JMenuBar auftragsverwaltungDHM;

    /**
     * Fenster Geschaeftspartner bearbeiten
     */
    private JDialog gpBearbDAF;

    /**
     * Untermenue Bearbeiten
     */
    private JMenu bearbeitenDUM;

    /**
     * Menuepunkt Bearbeiten eines Geschaeftspartners
     */
    private JMenuItem geschaeftspartnerDMB;

    /**
     * Menuepunkt Bearbeiten eines Artikel
     */
    private JMenuItem artikelDMB;

    /**
     * Menuepunkt Bearbeiten eines Auftrags
     */
    private JMenuItem auftragDMB;

    /**
     * Untermenue Auswertungen
     */
    private JMenu auswertenDUM;

    /**
     * Menuepunkt Umsatzauswertung
     */
    private JMenuItem umsatzDMB;

    /**
     * Untermenue Ausfuehrung
     */
    private JMenu beendenDUM;

    /**
     * Menuepunkt Beenden
     */
    private JMenuItem beendenDMB;    

}
 
Zuletzt bearbeitet:
aha...wärst du so nett und könntest noch ein bis zwei zeilen kommentar dazu schreiben...
 
Ich habe eigentlich nichts anderes gemacht als einen Layoutmanager (initComponents) dazu gepackt und spalte und höhe auf 600 bzw 400 gesetzt.
In init Components solltest du dann alle container platzieren
und mit pack(); dann anschliessend auf die minimal gebrauchte grösse resizen.
 
Zurück
Oben Unten