Swing JMenuBar unten in der Frame setzen?

Beatsleigher

Bekanntes Mitglied
Moin, moin.

Ich bin derzeit dabei, mein Programm für einen erneuten Release freizuschalten, doch vorher möchte ich zwei Komponenten tauschen; eine JMenuBar und eine JToolBar.

Die JMenuBar ist oben, und die JToolBar unten. Nun möchte ich die Position dieser beiden Komponente tauschen, weil das mit meinem momentanen L&F so funktioniert.

Hier ist ein Bild, welches das Design zeigt. Links: Mein Programm, rechts Dolphin (welches in QT geschrieben ist, jedoch mein GTK+ L&F benutzt).
tpo7xZIj

Ich möchte nur ungerne die JMenuBar komplett löschen und dann durch eine zweite JToolBar ersetzen, das würde auch einfach nicht schön aussehen.

Jede Hilfe ist willkommen 😀

Danke im Voraus. 🙂
 
Sieht ja pretty andvanced aus dein Tool! 🙂

Aber Ein Meü unter einer Toolbar??? Finde ich eher seltsam...
Das ich mal so was sage: Aber mach es doch wie (der alte?) Explorer von Microsoft. Wenn du ihn öffnest, hat er (normalerweise) kein Menü - drückst du dann aber mal die Alt-Taste (oder alternativ: wenn du in den oberen Bereich deiner Anwendung kommst), fadest du es ein (ich weiss das es so war, aber ich habe es anscheinend irgendwann mal fix gemacht).
 
Sieht ja pretty andvanced aus dein Tool! 🙂

Aber Ein Meü unter einer Toolbar??? Finde ich eher seltsam...
Das ich mal so was sage: Aber mach es doch wie (der alte?) Explorer von Microsoft. Wenn du ihn öffnest, hat er (normalerweise) kein Menü - drückst du dann aber mal die Alt-Taste (oder alternativ: wenn du in den oberen Bereich deiner Anwendung kommst), fadest du es ein (ich weiss das es so war, aber ich habe es anscheinend irgendwann mal fix gemacht).

Danke 🙂 Es kann noch viel mehr 😀

Ich hatte das in der alten Version vom Programm (die wurde in VB.NET geschrieben), und das sah auch ganz gut aus. Aber ich werde mal gucken, wie ich deinen Vorschlag effektiv einsetzen kann. Danke nochmal!
 
Eine Menubar wird IMMER oben in der Komponente angezeigt, zu der sie hinzugefügt wird.

Also musst du "nur" ein JPanel zum Süden, wenn es Borderlayout ist, hinzufügen und diesem die Menubar hinzfügen.
Java:
	public static void main(String[] args) {
		JFrame frame = new JFrame("Swap Menu/toolbar");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(new BorderLayout(0, 0));

		JPanel panel_2 = new JPanel();
		frame.getContentPane().add(panel_2, BorderLayout.NORTH);
		panel_2.setLayout(new BorderLayout(0, 0));

		JToolBar toolBar = new JToolBar();
		JButton button = new JButton("");
		button.setIcon(new ImageIcon(Menu.class.getResource("/images/corner.png")));
		toolBar.add(button);
		panel_2.add(toolBar, BorderLayout.NORTH);

		JPanel panel_1 = new JPanel();
		frame.getContentPane().add(panel_1, BorderLayout.CENTER);

		JPanel panel = new JPanel();
		frame.getContentPane().add(panel, BorderLayout.SOUTH);
		panel.setLayout(new BorderLayout(0, 0));

		JMenuBar menuBar = new JMenuBar();
		panel.add(menuBar, BorderLayout.NORTH);

		JMenu menu = new JMenu("File");
		menuBar.add(menu);
		JMenuItem menuItem = new JMenuItem("Exit");
		menu.add(menuItem);
		frame.setSize(300, 300);
		frame.setVisible(true);
	}
 

Anhänge

  • SwapMenuToolbar.PNG
    SwapMenuToolbar.PNG
    10,2 KB · Aufrufe: 35
@Turtle, dass ist Swing-Wissen, das mir fehlt... 🙂
In JavaFX (ich fass' Swing nicht mal mit Kneifzange mehr an ;-) ) wäre es allerdings völlig egal, wo das Menü liegt, daher bin ich davon ausgegangen, dass es in Swing genauso wäre...
 
Eine Menubar wird IMMER oben in der Komponente angezeigt, zu der sie hinzugefügt wird.

Also musst du "nur" ein JPanel zum Süden, wenn es Borderlayout ist, hinzufügen und diesem die Menubar hinzfügen.
Java:
	public static void main(String[] args) {
		JFrame frame = new JFrame("Swap Menu/toolbar");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(new BorderLayout(0, 0));

		JPanel panel_2 = new JPanel();
		frame.getContentPane().add(panel_2, BorderLayout.NORTH);
		panel_2.setLayout(new BorderLayout(0, 0));

		JToolBar toolBar = new JToolBar();
		JButton button = new JButton("");
		button.setIcon(new ImageIcon(Menu.class.getResource("/images/corner.png")));
		toolBar.add(button);
		panel_2.add(toolBar, BorderLayout.NORTH);

		JPanel panel_1 = new JPanel();
		frame.getContentPane().add(panel_1, BorderLayout.CENTER);

		JPanel panel = new JPanel();
		frame.getContentPane().add(panel, BorderLayout.SOUTH);
		panel.setLayout(new BorderLayout(0, 0));

		JMenuBar menuBar = new JMenuBar();
		panel.add(menuBar, BorderLayout.NORTH);

		JMenu menu = new JMenu("File");
		menuBar.add(menu);
		JMenuItem menuItem = new JMenuItem("Exit");
		menu.add(menuItem);
		frame.setSize(300, 300);
		frame.setVisible(true);
	}

Ok, danke, nur leider lässt mich NetBeans die MenuBar nicht mehr verschieben.

EDIT:
Ich habe mir kurze Hand überlegt, ich werde das Menü gleich weglassen. Stattdessen werde ich nur noch die Einstellungen oben in die ToolBar packen, für alles Andere gibt es schließlich Knöpfe...
VEL5ZsQ0
 
Zuletzt bearbeitet:
Ansonsten mach es doch wie Gnome auch und baue eine Menu-Button (den dem Gear-Symbol) ein. Also eigentlich nur ein Kontext-Menü auf einem Button. Ich befürchte, dass du sonst die Oberfläche mit den weniger wichtigen Menüeinträgen überfrachtest...
 
Ansonsten mach es doch wie Gnome auch und baue eine Menu-Button (den dem Gear-Symbol) ein. Also eigentlich nur ein Kontext-Menü auf einem Button. Ich befürchte, dass du sonst die Oberfläche mit den weniger wichtigen Menüeinträgen überfrachtest...

Ich hab das jetzt einfach so gemacht:
np08b6IJ


Sieht meiner Meinung nach nicht schäbig aus, und passt auch gut zum allgemeinen Design.
 
Juti und thumbs üp.

Ich möchte jetzt nicht überkritisch sein (jetzt kommt's 🙂 ), ABER: Wäre es nicht scheen, wenn der Knopf eine feste Position im UI hätte? Am einfachsten vielleicht, indem du ihn nach ganz vorne setze (ganz rechts wird durch Swing nicht gehen, oder?) und per Separator von den anderen abtrennst. Ich weiss, dass ist überpingelig, aber ich programmier' gerne UIs (nur eben nicht mit Swing - ich muss meine Antipathie gegenüber Swing noch einmal verdeutlichen 😛 ).

Grüsse,
Daniel

PS: So... Ich versuche mich jetzt mit nervigen Kleinigkeiten zurückzuhalten...
 
Juti und thumbs üp.

Ich möchte jetzt nicht überkritisch sein (jetzt kommt's 🙂 ), ABER: Wäre es nicht scheen, wenn der Knopf eine feste Position im UI hätte? Am einfachsten vielleicht, indem du ihn nach ganz vorne setze (ganz rechts wird durch Swing nicht gehen, oder?) und per Separator von den anderen abtrennst. Ich weiss, dass ist überpingelig, aber ich programmier' gerne UIs (nur eben nicht mit Swing - ich muss meine Antipathie gegenüber Swing noch einmal verdeutlichen 😛 ).

Grüsse,
Daniel

PS: So... Ich versuche mich jetzt mit nervigen Kleinigkeiten zurückzuhalten...


Ich nehme es as potenziellen Kundenfeedback 🙂
Alles gut, ich kann Kritik ab, es gehört zum Leben dazu.
 
Soll keine Kritik sein, aber wie kamst du eigentlich zu der Entscheidung, Swing zu verwenden?
Warum nicht SWT oder JavaFX?
Nur so aus purer Neugier.
 
Soll keine Kritik sein, aber wie kamst du eigentlich zu der Entscheidung, Swing zu verwenden?
Warum nicht SWT oder JavaFX?
Nur so aus purer Neugier.

Ich benutze NetBeans, und ich habe mich einfach über die Zeit mit Swing angefreundet. Ich kann das Design beliebig verändern, und kann auch sonst damit tun und lassen was ich will.

Zudem habe ich in NetBeans so einen schönen Editor, wie ich es von VS gewohnt war (Zum Glück habe ich mit .NET aber nichts mehr zu tun :lol🙂
 
Naja, .NOT ist schon nicht so toll, aber C# als Sprache ist (leider) schon um so einiges "reicher" als Java - auch als Java 8...

Wenn du NetBeans benutzt, ist es klar, warum du kein SWT verwendest, aber JavaFX erschliesst sich mir dann nicht. Ich dachte die Integration wäre dort eben besonders gut. Ist das nicht so?
(Ich finde - wie man den anderen JavaFX-Antworten von mir hier im Forum vielleicht entnehmen kann ;-) - JavaFX einfach "zeitgemässer" als Swing. Aber wie gesagt: War nicht als Kritik gedacht, sondern reine Neugier.)
 
Naja, .NOT ist schon nicht so toll, aber C# als Sprache ist (leider) schon um so einiges "reicher" als Java - auch als Java 8...

Wenn du NetBeans benutzt, ist es klar, warum du kein SWT verwendest, aber JavaFX erschliesst sich mir dann nicht. Ich dachte die Integration wäre dort eben besonders gut. Ist das nicht so?
(Ich finde - wie man den anderen JavaFX-Antworten von mir hier im Forum vielleicht entnehmen kann ;-) - JavaFX einfach "zeitgemässer" als Swing. Aber wie gesagt: War nicht als Kritik gedacht, sondern reine Neugier.)

Ich kann sowohl in .NET (VB, C#), als auch in C++ und Java programmieren. Mir persönlich gefällt Java am Besten. Es is völlig plattformunabhängig, und ich kann unter Swing einige Sachen machen, die ich unter (z.B.) .NET nur mit WPF machen kann.

Das Einzige, was mir fehlt, ist With (Keyword) (VB), Using/using (VB/C#). Für alles Andere, habe ich eigene Lösungen gefunden, unter Anderem auch, wie ich meine Einstellungen verwalte. Unter .NET habe ich IMMER die Registry benutzt. Das war ein wenig benutzer-unfreundlich, und wo ich in .NET programmiert habe, war ich eine absolute Niete. Java hat mein Programmier-Horizont sehr viel erweitert. Aber zurück zum Punkt; seither benutze ich (so gut wie immer) settings.bin - Worin ich dann die Settings als String speicher. Dies mache ich so, damit N00bs nicht einfach so in die Einstellungen gehen und alles verpatzen.
 
Falls du SQL kannst, wäre auch eine SQL-DB sinnvoll. Zum Beispiel SQLite
https://bitbucket.org/xerial/sqlite-jdbc

Aber auch JSON (z.B. via Jackson) oder XML (JaxB oder SimpleXML) bietet sich zum konfigurieren an. Properties oder INIs sind aber natürlich auch voll ok.

Ich bin eigentlich fast ausschliesslicher Java-Entwickler, kann etwas C (arg eingerostet) und C# (selten, mit Mono aber auch "relativ" platformunabhängig möglich, wenn man maximal win32 ohne schickschnack verwendet) sowie Python (coole Sprache, finde ich). JavaScript muss ich leider auch ein wenig machen (ich hasse diese "Sprache"). Zum Glück sind jetzt mit Java8 auch neue Sprachfeatures dazugekommen, mit denen man jetzt Funktionaler an Java herangehen kann. Ob das immer besser ist, muss wohl jeder für sich entscheiden.

Hast du eigentlich eine herunterladbare Version deines Tools, oder muss man es im Moment immer auschecken?
 
Falls du SQL kannst, wäre auch eine SQL-DB sinnvoll. Zum Beispiel SQLite
https://bitbucket.org/xerial/sqlite-jdbc

Aber auch JSON (z.B. via Jackson) oder XML (JaxB oder SimpleXML) bietet sich zum konfigurieren an. Properties oder INIs sind aber natürlich auch voll ok.

Ich bin eigentlich fast ausschliesslicher Java-Entwickler, kann etwas C (arg eingerostet) und C# (selten, mit Mono aber auch "relativ" platformunabhängig möglich, wenn man maximal win32 ohne schickschnack verwendet) sowie Python (coole Sprache, finde ich). JavaScript muss ich leider auch ein wenig machen (ich hasse diese "Sprache"). Zum Glück sind jetzt mit Java8 auch neue Sprachfeatures dazugekommen, mit denen man jetzt Funktionaler an Java herangehen kann. Ob das immer besser ist, muss wohl jeder für sich entscheiden.

Hast du eigentlich eine herunterladbare Version deines Tools, oder muss man es im Moment immer auschecken?

Ja, man kann es herunterladen. Jedoch nicht in dem Zustand, in dem es jetzt ist. Aber ich schicke dir mal via PN eine Vorabversion von 0.6 🙂
Wenn du auf G+ angemeldet bist, kannst du mir da auch eine Nachricht schreiben. Da krieg ich es wenigstens mit 😀

Sent from my GT-I9505 using Tapatalk
 

Neue Themen


Zurück
Oben