JButton UI von JMenu UI casten

T

testIt

kann man das lookAndFeel-Layout eines JMenu auf ein JButton übertragen?

Java:

JButton jButton=new JButton();
jButton.setUI(new JMenu().getUI);


funktioniert nicht.

Wollte das so machen, weil JMenu und JButton den MouseListener unterschiedlich ausführen/interpretieren, da nutzt JMenu vor allem MenuListener.

Eigentlich will ich den JButton ins JMenuBar legen, der Button soll dann das gleiche Aussehen haben wie die JMenu.
 
Ich will ein Menu schaffen, dass JMenuBar und JToolBar vereinig.
Alle Komponenten auf der Menuleiste sollten die gleiche LAF haben. Die einen Komponenten öffnen ein Menu, die anderen führen sofort Funktionen aus, wenn diese betätigt werden.

Da fällt mir nur die Kombination JMenuBar und JButton ein, aber die LAF müssten da noch angepasst werden. DAs LAF des JButton sollte so aussehen wie das LAF des JMenuBar.

Code:


import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;

public class JMenuBarBeispiel implements ActionListener {

JFrame applikation;
Container container;

// Menüleiste
JMenuBar menueLeiste;

// Menüleiste Elemente
JMenu datei;
JMenu hilfe;

// Datei
JMenuItem oeffnen;
JMenuItem beenden;

// Hilfe
JMenuItem faq;
JMenuItem about;

// Textfeld
JTextArea textarea;

public JMenuBarBeispiel() {
applikation = new JFrame("JMenuBar Beispiel");
container = applikation.getContentPane();

// Menüleiste erzeugen
menueLeiste = new JMenuBar();

// Menüelemente erzeugen
datei = new JMenu("Datei");
hilfe = new JMenu("Hilfe");

// Untermenüelemente erzeugen
oeffnen = new JMenuItem("öffnen");
oeffnen.addActionListener(this);
beenden = new JMenuItem("beenden");
beenden.addActionListener(this);
faq = new JMenuItem("F.A.Q.");
faq.addActionListener(this);
about = new JMenuItem("Über");
about.addActionListener(this);

// Menüelemente hinzufügen
menueLeiste.add(datei);
menueLeiste.add(hilfe);

JButton jButton=new JButton("test");
menueLeiste.add(jButton);

// Untermenüelemente hinzufügen
datei.add(oeffnen);
datei.add(beenden);
hilfe.add(faq);
hilfe.add(about);

// Textfeld erzeugen
textarea = new JTextArea();

applikation.add(menueLeiste, BorderLayout.NORTH);
applikation.add(new JScrollPane(textarea), BorderLayout.CENTER);

applikation.setSize(400, 300);
applikation.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try{
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
javax.swing.SwingUtilities.updateComponentTreeUI(applikation);
}catch(Exception e){}
applikation.setVisible(true);
}

public void actionPerformed(ActionEvent object) {
if (object.getSource() == oeffnen){
System.out.println("öffnen wurde angeklickt");
}
if (object.getSource() == beenden){
System.out.println("beenden wurde angeklickt");
}
if (object.getSource() == faq){
System.out.println("faq wurde angeklickt");
}
if (object.getSource() == about){
System.out.println("über wurde angeklickt");
}
}

public static void main(String[] args) {
new JMenuBarBeispiel();
}
}
 
Hallo,

um es mir mal vorzustellen, möchtest du sowas wie bei MS Office 2007 umsetzen?

Gruß

Sascha
 
Ein Ribbon bzw. 'ne Multifunktionsleiste wäre wow ...
eher meine ich eine einzige Leiste, in der sich Funtionalitäten von JToolBar und JMenuBar vereinen.
 
Also du wirst die MenuUI nicht dem Button zuweisen können.

Ich hab noch nicht so ganz verstanden warum du einen Button in das Menu hängen möchtest. Geht es dir da nur um den Listener?

Gruß

Sascha
 
Also falls es dir weiterhilft, du könntest ja mal auf JavaSoft vorbeischauen.

Ob du Synthetica brauchst, weiß ich nicht, wohl nicht. Aber vielleicht ist bei den SyntheticaAddons was dabei. Schau dir mal die Demo an, vielleicht findest du da was, was in deine Richtung geht. Spontan würde ich sagen, dass du sowas suchst, wie die ButtonBar von den SyntheticaAddons.

Wie gesagt, schau dir die Demo an, da sind alle Komponenten beispielhaft dargestellt, so dass man auch gleich damit "rumspielen" kann.
 
SyntheticaAddons is cool

Indem ich JMenuBar und JToolbar zusammenlege, kann ich eine Leiste einsparen und gewinne mehr Platz für meine übrigen Komponenten und was vielleicht noch wichtiger ist, ich kann eine einzige Logik nutzen, eine beliebige Leiste (Tollbar oder Menubar oder Statusbar) herzustellen.

Am geeignetesten scheint mir hier die JMenuBar, da sie einerseits LAF kann, andererseits die komplizierten Mechnaismen zwischen Button und Öffnen eines PopupMenüs perfekt beherrscht.. Es müssen nur noch die Features einer Toolbar hinzugefügt werden.
 
Hast du dir die Demo überhaupt angeschaut?

Die Komponenten basieren alle auf Swing bzw SwingX und können auch LAF. Wenn du eine JToolBar benutzt, dann kannst du da normale Buttons einfügen und eben DropDownButtons, welche ebenfalls DropDown-Popups erstellen können. Damit hast du dann im Prinzip eine JMenuBar o_O
 
Nicht sauer sein, aber ich lese erst immer die Lizenzbedingungen ...
ansonsten versuche ich, sowas selbst zu bauen.

License
Licensing options for Synthetica

* The commercial license enables you to use and distribute Synthetica together with your commercial application.
* Non-commercial applications can use and distribute Synthetica and some of our Synthetica-Themes for free - see also Themes.
 
Ich bin nicht sauer, aber du hast da was falsches gelesen xD

Für SyntheticaAddons gilt das hier:
Licensing options for SyntheticaAddons

* The commercial license enables you to use and distribute SyntheticaAddons together with your commercial application.
* Non-commercial applications can use and distribute SyntheticaAddons for free.
 
Zurück