Ein MenueItem rechtsbuendig

Hallo,

habe ein Menue mit Items, funktioniert auch alles

nur möchte ich jetzt **rechts **in der Menuleiste die Uhrzeit ausgeben

nur weiß ich nicht, wie ich das Label rechts in die Menueleiste bekomme.

danke gü

Das wußte ich auch nicht, habe aber mal geschaut: Das BasicMenuUI verwendet ein BoxLayout … also, so SCHEINT es erstmal zu funktionieren, aber… ob es eine … wie soll ich sagen… andere/besser/konventionellere/offizielle Lösung gibt, müßte ich auch erst websuchen:

package bytewelt;

import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.SwingUtilities;

public class MenuAlignTest
{
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                createAndShowGUI();
            }
        });
    }

    private static void createAndShowGUI()
    {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        JMenuBar menuBar = new JMenuBar();
        menuBar.add(new JMenu("A"));
        menuBar.add(new JMenu("B"));
        
        JLabel label = new JLabel("Time");
        menuBar.add(Box.createHorizontalGlue()); // <------------- magische Zeile
        menuBar.add(label);
        
        f.setJMenuBar(menuBar);
        f.setSize(600,300);
        f.setVisible(true);
    }

}

echt cool!!
it´s really magic!

scheint wohl ein Trick zu sein die box scheint sich irgendwie “dazwischen zu quetschen”
wenns denn hilft!
erst mal danke
es ist genau das was ich wollte

gruß gü

*** Edit ***

JPanel jp = new JPanel();
.
.
menuBar.add(jp);

funktioniert auch:-)
d.h. die menueleiste scheint defaultmaeßig FlowLayout zu sein
was als leiste ja auch sinn macht

gruss gü

Also mit dem Panel funktioniert das bei mir so nicht direkt, nur mit sowas wie

        JLabel label = new JLabel("Time");
        JPanel p = new JPanel(new BorderLayout());
        p.add(label, BorderLayout.EAST);
        //menuBar.add(Box.createHorizontalGlue());
        menuBar.add(p);

Aber um das nochmal zu betonen: Im BasicMenuBarUI wird ein DefaultMenuLayout gesetzt, das direkt von BoxLayout erbt - aber natürlich könnten bestimmte LaFs da was anderes machen.


import java.awt.FlowLayout;

import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
 
public class MenuAlignTest
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
createAndShowGUI();
}
});
}
 
private static void createAndShowGUI()
{
JFrame f = new JFrame();
JPanel jp = new JPanel();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
JMenuBar menuBar = new JMenuBar();
menuBar.add(new JMenu("A"));
menuBar.add(new JMenu("B"));
 
JLabel label = new JLabel("Time");
//menuBar.add(Box.createHorizontalGlue()); // <------------- magische Zeile
menuBar.add(jp);
menuBar.add(label);
 
f.setJMenuBar(menuBar);
f.setSize(600,300);
f.setVisible(true);
}
 
}

das geht bei mir

Ach so, ich dachte, du hättest das Label IN das Panel gelegt…

ich glaube die behandeln die Menuebar wie ein Panel mit irgendeinem defaultlayout

ich vermute mal flow layout

wahrscheinlich kann man bevor man überhaupt irgendwas macht auch z.B. ein Panel mit z.B. GridLayout (0,3) nehmen
und darin jeweils ein Panel Flowout LEFT, Center und RIGHT und die Menueitems jeweils auf die panels setzen
dann hätte man links welche, in der Mitte, welche und rechts

könnte ja mal jemang ausprobieren

gruss gü

Wie oben schon erwähnt: Die JMenuBar hat quasi ein BoxLayout. Da kam auch der Ansatz mit dem horizontalGlue her :wink:

aus Sicht der Leiste scheint FL, BL das gleiche zu sein