Swing Probleme mit JMenuBar

NR_EIGHT

Mitglied
Hallo,

Ich bin neu hier und auch neu in Java...
Fange kommendes Semester mit einem Informatikstudium an.

Momentan arbeite ich mich durch das Buch "Handbuch der Java Programmierung".
Es klappt auch alles wunderbar und ich schreibe grade zu Übungszwecken eine Anwendung. Dazu sei gesagt das ich mit Apple arbeite.

Nun will ich eine Menüleiste mit Hilfe von JMenuBar in meiner GUI erstellen.
allerdings erkennt Eclipse
Code:
setJMenuBar(menubar);
als falsch. Warum? wie soll ich die sonst setzen?
Oder liegt es daran das sie nur direkt im JFrame gesetzt werden kann und nicht in ein JPanel, da ich sie momentan zur Klasse MainPanel setzen wollte.

Meine zweite Frage ist, wie ich es bewerkstellige die JMenuBar Mac OS X like aus dem Fenster zu entfernen und am oberen Bildschirmrand angezeigt wird. Geht das überhaupt? Das Buch verliert über die Angleichung oder Umsetzung unter Mac nicht viele Worte -.-

Hier der Code:
Java:
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class MainPanel extends JPanel implements ActionListener {
	private JButton	button_bill_new, button_bill_print, button_bill_load;
	private	JPanel	menuPanel, overviewPanel, contentPanel, statusPanel;
	private JMenuBar menubar;
	
	public MainPanel() {
		super(new BorderLayout());
		
		JMenuBar menubar = new JMenuBar();
		menubar.add(createFileMenu());
		setJMenuBar(menubar);
		
		add(createMenuPanel(), BorderLayout.NORTH);
		add(createOverviewPanel(), BorderLayout.WEST);
		add(createContentPanel(), BorderLayout.CENTER);
		add(createStatusPanel(), BorderLayout.SOUTH);
	}
	
	//Menübar
	private JMenu createFileMenu() {
		JMenu menu = new JMenu("Datei");
		JMenuItem item;
		
		//öffnen
		item = new JMenuItem("Öffnen");
		item.addActionListener(this);
		menu.add(item);
		
		return menu;
	}
	
	//Menü
	private JPanel createMenuPanel() {
		menuPanel = new JPanel();
		
		return menuPanel;
	}
	
	//Übersicht
	private JPanel createOverviewPanel() {
		overviewPanel = new JPanel();
		
		return overviewPanel;
	}

	//Content
	private JPanel createContentPanel() {
		contentPanel = new JPanel();
		
		return contentPanel;
	}
	
	//Status
	private JPanel createStatusPanel() {
		statusPanel = new JPanel();
		
		return statusPanel;
	}
	

	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		
	}
}
 
Nun will ich eine Menüleiste mit Hilfe von JMenuBar in meiner GUI erstellen.
allerdings erkennt Eclipse
Code:
setJMenuBar(menubar);
als falsch. Warum? wie soll ich die sonst setzen?
Oder liegt es daran das sie nur direkt im JFrame gesetzt werden kann und nicht in ein JPanel, da ich sie momentan zur Klasse MainPanel setzen wollte.

Ja, die JMenuBar musst du im JFrame setzen...
 
Ok,
habe es nun folgender massen gelöst, allerdings wird weit und breit keine Menüleiste angezeigt...

Java:
import java.awt.event.*;
import java.awt.*;

import javax.swing.*;

public class Ibill extends JFrame implements ActionListener {
	
	
	public Ibill(String title) {
		JMenuBar menuBar = new JMenuBar();
		menuBar.add(createFileMenu());
		setJMenuBar(menuBar);
		
		JFrame frame = new JFrame(title);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(new MainPanel());
		frame.setSize(800, 500);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
	
	private JMenu createFileMenu() {
		JMenu menu = new JMenu("Datei");
		JMenuItem item;
		
		item = new JMenuItem("Neu");
		item.addActionListener(this);
		menu.add(item);
		
		item = new JMenuItem("Öffnen");
		item.addActionListener(this);
		menu.add(item);
		
		item = new JMenuItem("Speichern");
		item.addActionListener(this);
		menu.add(item);
		
		return menu;
	}
	
	public void actionPerformed(ActionEvent event) {
		System.out.println(event.getActionCommand());
	}
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				new Ibill("iBill Manager");
			}
		});
	}
}
 
Zuletzt bearbeitet:
Im Konstruktor erstellst du einen NEUEN Frame, der mit dem Frame "Ibill" nichts zu tun hat
Java:
    public Ibill(String title) {
        JMenuBar menuBar = new JMenuBar();
        menuBar.add(createFileMenu());
        setJMenuBar(menuBar);

        //JFrame frame = new JFrame(title); // WEG!
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(new MainPanel());
        setSize(800, 500);
        setLocationRelativeTo(null);
        setVisible(true);
    }
 
HA, super...
Da hätte ich auch drauf kommen können.

Jetzt stellt sich nur noch die Frage, wie ich die MenuBar aus dem Frame entferne.
ich habe folgende Codezeile beim stöbern im Inet gefunden:
Code:
apple.laf.useScreenMenuBar
mit
Code:
true
bzw.
Code:
false
.

Allerdings weiß ich nicht wie ich dies in den Code einbauen muss...

Mfg NR8
 
Ja thx,

Hab's hin bekommen 🙂

Java:
	public static void main(String[] args) {
		System.setProperty("apple.laf.useScreenMenuBar", "true");
		
		Ibill frame = new Ibill();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(new MainPanel());
		frame.setSize(800, 500);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		
		
	}
 

Zurück
Oben