Position des Icons bei JMenuItem

sylo

Bekanntes Mitglied
Hi zusammen

hab mir mit Swing ein Menü erstellt.

Mein Icon hol ich Global mit
Java:
private Icon icon = new ImageIcon(this.getClass().getResource("/Remove.png"));

Dann erzeuge ich die MenuBar, und die einzelnen Menüpunkte
Java:
JMenuBar menuBar = new JMenuBar();
			JMenu jMenuFile = new JMenu("File");
			JMenuItem jMenuItemNew = new JMenuItem("New", icon);
			jMenuItemNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
					Event.CTRL_MASK, true));
			jMenuItemNew.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					guiElements.newFile();
					return;
				}
			});

 jMenuFile.add(jMenuItemNew);
			jMenuFile.add(jMenuItemOpen);
			jMenuFile.add(jMenuItemSave);
			jMenuFile.add(jMenuItemSaveAs);
			jMenuFile.addSeparator();
			jMenuFile.add(getHistory(guiElements));
			jMenuFile.addSeparator();
			jMenuFile.add(jMenuItemExit);

 menuBar.add(jMenuFile);

Mein Menü sieht nun folgendermassen aus:
menup.jpg


Ich hätte es aber gerne so, dass das Minussymbol weiter links angesetzt wird. Also in etwa so, dass die Symbole untereinander sind und die dazugehörigen Texte ebenfalls untereinander.

Mit setIcon() direkt habe ich das gleiche Ergebniss und mit verschiedenen LayoutManagern habe ich auch nicht das gewünschte Ergebniss erzielt.

Zum besseren Verständnis ist hier der Link zu der Sun Seite wo ein Beispiel ist, wie es aussehen soll.
How to Use Menus (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
Gleich das erste Bild.

Danke schon mal.

Grüße
sylo
 

Michael...

Top Contributor
So spontan wüsste ich nicht, ob es da eine vernünftige Lösung gibt.
q&d würde ich sagen: Pack vor die anderen Einträge ein durchsichtiges Icon mit der gleichen Breite.
 

KrokoDiehl

Top Contributor
Also bei mir sehe ich so ein Verhalten nicht. Mein Menü wird sehr ähnlich aufgebaut (allerdings über Actions) und dort gibt es auch den Fall, dass manche Einträge ein Icon haben, andere nicht. Dort sind aber die Namen alle untereinander.
Ich schiebe es daher mal auf das Look&Feel (ich habe es bisher hauptsächlich mit Std-Windows-LaF gemacht).
 

sylo

Bekanntes Mitglied
Aber genau mit dem versuche ich es auch.

Java:
try {
			UIManager
					.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
		} catch (Exception ex) {
			ex.printStackTrace();
		}

oder meinst du einen anderen?
Ich habs aber auch mit

- javax.swing.plaf.metal.MetalLookAndFeel
und
-com.sun.java.swing.plaf.motif.MotifLookAndFeel

probiert aber mit gleichem Ergebnis.

@Michael
Das ist dann echt die Notlösung. Sieht zwar nicht besonders schick aus aber zumindest sind sie dann untereinander.
 

KrokoDiehl

Top Contributor
Morgen.
Also ich kann dieses Fehlverhalten beim besten Willen nicht nachproduzieren. Der einzige -für mich noch ersichtliche Unterschied- ist dass Windows-Theme. Anhand deines Screenshots tippe ich auf WinXP. Ich habe hier leider nur WinClassic. Aber ehrlich gesagt, kann ich mir nicht vorstellen, dass es daran liegt.

Hier meine Versuchsmethode (mit der äußerst hilfreichen Aussage: "Bei mir geht's" :) )...
Java:
	public static void main( String[] args )
    {
	    try
	    {
	        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
	        
	        final Image  icon  = ImageIO.read(new File("MEIN BILD"));
	        final JFrame frame = new JFrame("Test");
	        
	        final JMenuBar mBar = new JMenuBar();
	        final JMenu    fMen = new JMenu("Datei");
	        
	        final JMenuItem i1 = new JMenuItem("Menü 1", new ImageIcon(icon));
	        i1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, KeyEvent.CTRL_DOWN_MASK));
//	        i1.setIcon(new ImageIcon(i));
	        
	        final JMenuItem i2 = new JMenuItem("Menü 2");
	        i2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2, KeyEvent.CTRL_DOWN_MASK));
	        
	        fMen.add(i1);
	        fMen.add(i2);
	        fMen.addSeparator();
	        fMen.add(new JMenuItem("Noch'n Test"));
	        mBar.add(fMen);
	        
	        frame.setJMenuBar(mBar);
	        frame.add(new JTextArea(5, 5));
	        
	        SwingUtilities.invokeLater(new Runnable()
            {
                @Override
                public void run()
                {
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.pack();
                    frame.setVisible(true);
                }
            });
	    }
	    catch (Exception e) 
	    {
	        e.printStackTrace();
        }
    }

Kann es vielleicht an anderen Dingen liegen? Wie fügst du die JMenuBar in dein Fenster ein? Via
Code:
setJMenuBar(...)
oder via
Code:
add(...)
?
Oder wird dein Menü erst zur Laufzeit aufgebaut? Vielleicht liegt es bei dir daran, dass er zu einem gewissen Zeitpunkt die Breite des Icons noch nicht hat und daher alle übrigen Menüeinträge nicht entsprechend einrückt.
Ich rate halt mal so vor mich hin...
 

sylo

Bekanntes Mitglied
Hi

also ich habe eines neues Projekt erstellt und dein Code, so wie er ist, in eine neue Klasse kopiert. Die Stelle mit SwingUtilities habe ich abgeändert und der Code sieht so aus
Java:
public class Test {

	public static void main( String[] args )
    {
        try
        {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
          
            final Image  icon  = ImageIO.read(new File("src/Clear.png"));
            final JFrame frame = new JFrame("Test");
            
            final JMenuBar mBar = new JMenuBar();
            final JMenu    fMen = new JMenu("Datei");
            
            final JMenuItem i1 = new JMenuItem("Menü 1", new ImageIcon(icon));
            i1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, KeyEvent.CTRL_DOWN_MASK));
//          i1.setIcon(new ImageIcon(i));
            
            final JMenuItem i2 = new JMenuItem("Menü 2");
            i2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2, KeyEvent.CTRL_DOWN_MASK));
            
            fMen.add(i1);
            fMen.add(i2);
            fMen.addSeparator();
            fMen.add(new JMenuItem("Noch'n Test"));
            mBar.add(fMen);
            
            frame.setJMenuBar(mBar);
            frame.add(new JTextArea(5, 5));
            
            
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setVisible(true);
            
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }
}

Und leider ist das Icon immer noch eingerückt.
Liegt es vielleicht an einer lokalen Einstellung?
 

sylo

Bekanntes Mitglied
HI

ich bin mir nicht sicher, ob ich die Lösung für das Problem gefunden habe, oder es nur Zufall ist. Kann es mir irgendwie nicht ganz erklären.:bahnhof:

Mein Projekt wird mit der 1.5 JDK entwickelt. Wenn ich zu 1.6 switche funktioniert es. Kann das einer Bestätigen, dass dies der Fall ist?

@KrokoDiel
Könntest du bitte mal bei dir ausprobieren ob dein Code unter 1.5 auch normal funktioniert?
 

Ebenius

Top Contributor
Na wenn sich das Programm mit Java 6 richtig verhält, dann gehe ich davon aus, dass Sun da einen Bug geflickt hat. Kein Problem, oder?

Ebenius
 

sylo

Bekanntes Mitglied
Hi

nur noch mal zur Bestätigung.

Das Problem liegt an der JDK Version bzw. am Windows LAF.
Ab JDK 1.6 oder Windows LAF Version 0.3 ist das Problem gefixt.

Danke für eure Hilfe

Grüße
sylo
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N javafx Position der Bustaben finden label AWT, Swing, JavaFX & SWT 1
D JInternalFrame wechselt Position beim ersten Click AWT, Swing, JavaFX & SWT 0
S GUI Kreuz zeichnen und Position ausgeben AWT, Swing, JavaFX & SWT 3
C JavaFX Window-Position AWT, Swing, JavaFX & SWT 3
E JavaFX Cursor-Position im ScrollPane AWT, Swing, JavaFX & SWT 0
J BorderPane Position AWT, Swing, JavaFX & SWT 3
A Swing Fenster ändert Position bei Mausklick nicht AWT, Swing, JavaFX & SWT 2
A Swing JFrame neuzeichnen lassen, position neu berechnen lassen? AWT, Swing, JavaFX & SWT 9
F JavaFX Timeline Animation soll X- und Y-Position während Animation ändern AWT, Swing, JavaFX & SWT 2
F JavaFX Position von Image angeben/verändern AWT, Swing, JavaFX & SWT 2
F JScrollPane Position setzen (x=0, y=0) AWT, Swing, JavaFX & SWT 2
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
T SWT Wie kriege ich die Position des Textfeldes raus? AWT, Swing, JavaFX & SWT 19
C LayoutManager JFrame größe und ausrichtung + Position von Fensterelementen AWT, Swing, JavaFX & SWT 2
B Popup auf der Textcoursor-Position AWT, Swing, JavaFX & SWT 5
O Swing Spalten-Position nach verschieben AWT, Swing, JavaFX & SWT 6
0 Swing JTextField - Position ? AWT, Swing, JavaFX & SWT 2
E Swing Objekt zu Position (Point) bewegen AWT, Swing, JavaFX & SWT 2
C Label wird nicht an der richtigen Position angezeigt.. AWT, Swing, JavaFX & SWT 7
TheWhiteShadow Swing Document Text Position in Pixel AWT, Swing, JavaFX & SWT 2
M Jtable - wie position einer Celle bestimmen bei Multiselect AWT, Swing, JavaFX & SWT 4
B MessageBox Position Verändern AWT, Swing, JavaFX & SWT 8
B Swing Komponente an Position eines Objektes ausgeben lassen AWT, Swing, JavaFX & SWT 3
B Position in einem Bild ermitteln AWT, Swing, JavaFX & SWT 3
B [ERLEDIGT]gui problem(genaue position von buttons ect.) AWT, Swing, JavaFX & SWT 9
M Position eines JLabels mit getX() auslesen AWT, Swing, JavaFX & SWT 2
M Position eines JLabels speichern? AWT, Swing, JavaFX & SWT 3
D Swing PopupMenu immer an gewünschte Position? AWT, Swing, JavaFX & SWT 2
W Swing Bild zeichnen wenn Maus an bestimmter Position ist AWT, Swing, JavaFX & SWT 4
R Swing GlazedLists UND Problem mit der Position des Cursors AWT, Swing, JavaFX & SWT 2
M 3D-Grafik Probleme mit Position der ViewPlatform AWT, Swing, JavaFX & SWT 4
C Caret Position mit X-Y-Koordinaten ermitteln AWT, Swing, JavaFX & SWT 2
J Swing Problem - Abspeichern JSplitPane Position AWT, Swing, JavaFX & SWT 5
E Swing Runde Buttons / Position eines Obj. im Layout AWT, Swing, JavaFX & SWT 7
S Feste Position einer Komponente auf Glasspane AWT, Swing, JavaFX & SWT 6
V Position der JScrollBar ändern AWT, Swing, JavaFX & SWT 5
T Z-Position der ViewPlatform? AWT, Swing, JavaFX & SWT 3
N Swing JTextArea/JScrollpane: JScrollbar position AWT, Swing, JavaFX & SWT 8
B aktuelle Position des Fensters ermitteln AWT, Swing, JavaFX & SWT 3
H Y-Position mit get-/setLocation() unter Linux/Enlightement16 inkonsistent AWT, Swing, JavaFX & SWT 3
K JLayeredPane Elemente auf gleicher Position AWT, Swing, JavaFX & SWT 7
E Swing JLabel ändert seine Position nach setText AWT, Swing, JavaFX & SWT 2
G Absolute Position von Komponenten AWT, Swing, JavaFX & SWT 3
hdi SWT FileDialog wird an scheinbar beliebiger Position angezeigt AWT, Swing, JavaFX & SWT 2
K mehrere JTextFields - wie finde ich die Cursor-Position? AWT, Swing, JavaFX & SWT 5
lumo SWT Absolute position einer Composite/Control AWT, Swing, JavaFX & SWT 5
ElViZ End-Position eines gezeichneten Strings ermitteln. AWT, Swing, JavaFX & SWT 2
H Swing Illegal component position! AWT, Swing, JavaFX & SWT 2
Pithecanthropus Swing JScrollBar-Position festlegen.. AWT, Swing, JavaFX & SWT 3
K Postion Y im Frame != Position Y ?? AWT, Swing, JavaFX & SWT 16
R Position einer Componente? AWT, Swing, JavaFX & SWT 9
A Label hat falsche Position AWT, Swing, JavaFX & SWT 4
M Scrollbar anpassen (Position) AWT, Swing, JavaFX & SWT 6
M GridBagLayout - Position immer zentriert AWT, Swing, JavaFX & SWT 5
J absolute Position einer JComponent ermitteln AWT, Swing, JavaFX & SWT 4
J JSplitpane separator soll nicht seine Position veraendern? AWT, Swing, JavaFX & SWT 3
P JButton Position rausfinden beim GridBagLayout AWT, Swing, JavaFX & SWT 2
A erneutes Öffnen jInternalFrame: illegal component position AWT, Swing, JavaFX & SWT 4
X Dynamische linien (Position und Länge) AWT, Swing, JavaFX & SWT 4
G position im FlowLayout AWT, Swing, JavaFX & SWT 11
B Thumbnail-Position per Mausklick ändern AWT, Swing, JavaFX & SWT 3
& Position eines Fensters nicht verändern AWT, Swing, JavaFX & SWT 8
A Position des Fensters verändern AWT, Swing, JavaFX & SWT 21
U JTable Position der Spalte abfragen AWT, Swing, JavaFX & SWT 7
D JInternalFrame iconified Position nach parent-resize AWT, Swing, JavaFX & SWT 2
U Problem mit JButton (Position & Größe) AWT, Swing, JavaFX & SWT 7
W Schnappen der Größe und Position AWT, Swing, JavaFX & SWT 7
S Falsche Position, Elemente erscheinen nicht, Flackern AWT, Swing, JavaFX & SWT 6
S Position eines Fensters festlegen AWT, Swing, JavaFX & SWT 2
L Menu Position verändern? AWT, Swing, JavaFX & SWT 24
P JPanel im BorderLayout feste Größe/Position zuordnen AWT, Swing, JavaFX & SWT 3
T jTable / Spaltenbreite und Position AWT, Swing, JavaFX & SWT 2
J InternalFrames Grösse Position AWT, Swing, JavaFX & SWT 3
vogella JScrollPane - Position setzen der Scrollbalken AWT, Swing, JavaFX & SWT 5
M JPanel Position tut nicht, was sie soll AWT, Swing, JavaFX & SWT 8
T jTable Colum feste position AWT, Swing, JavaFX & SWT 3
S Position von Labels, Buttons, etc. festsetzen und Scrollen AWT, Swing, JavaFX & SWT 4
M GridBagLayout - Component Position AWT, Swing, JavaFX & SWT 4
B Setzen von Position > 90 bei JScrollbar nicht möglich AWT, Swing, JavaFX & SWT 3
M Position im JTree veraendern AWT, Swing, JavaFX & SWT 3
A Position im Text bei Rechtsklick AWT, Swing, JavaFX & SWT 7
T JScrollPane Scrollbar-Position AWT, Swing, JavaFX & SWT 2
Y BasicArrowButton + Größe und Position AWT, Swing, JavaFX & SWT 7
K Mouse Position nach Drag und Drop? AWT, Swing, JavaFX & SWT 4
lin ?JDialog?-nur best. Grösse und Position AWT, Swing, JavaFX & SWT 2
B JLabel ändert seine Position AWT, Swing, JavaFX & SWT 7
M Position von Eingabe-Fenster AWT, Swing, JavaFX & SWT 5
R text offset versus JTextComponent caret position AWT, Swing, JavaFX & SWT 6
G Probleme mit der Position eines JPanels AWT, Swing, JavaFX & SWT 2
T Größe und Position eines JLabels ermitteln AWT, Swing, JavaFX & SWT 3
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
thor_norsk Icons laden nicht in GUI AWT, Swing, JavaFX & SWT 15
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
ProggersWorld JavaFX Icons im TreeView werden nicht angezeigt AWT, Swing, JavaFX & SWT 1
VPChief Icons in 2 Jlabels Director nebeneinander anzeigen AWT, Swing, JavaFX & SWT 26
F Icons neben Text in Listview setzen AWT, Swing, JavaFX & SWT 2
A Jtabbed ein Reiter mit zwei icons AWT, Swing, JavaFX & SWT 4
B SWT TreeViewer dynamische Anzeige von Icons AWT, Swing, JavaFX & SWT 3
B Link eines Icons dynamisch gestalten AWT, Swing, JavaFX & SWT 2
JavaInBrain Swing JButton: Zuordnen von Icons AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben