Dodając ikonę do elementów menu napotykam na problem, który polega na tym, że ikona z tekstem jest nieco przesunięta w prawą stronę. W wyniku tego po lewej stronie powstaje luka, która nie prezentuje się zbyt dobrze...

Czym może to być spowodowane?
Dodając ikonę do elementów menu napotykam na problem, który polega na tym, że ikona z tekstem jest nieco przesunięta w prawą stronę. W wyniku tego po lewej stronie powstaje luka, która nie prezentuje się zbyt dobrze...

Czym może to być spowodowane?
Daj kod jakim dodajesz ten Exit do menu
Jesteś pewien, że to nie jest wina obrazka?
Pozycję menu tworze tak:
saveItem = new JMenuItem("Zapisz",new ImageIcon("resources/Exit.gif"));
Generalnie testuje sobie Google Window Buildera do tworzenia GUI. Osobiście nie zachwyciła mnie jakość wygenerowanego kodu, ale to raczej nie jest przyczyna takich problemów.
Ustawiony jest systemowy Look and Feel jednak gdy zmieni się np. na Metal to ikona wyświetlana jest już poprawnie
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
Menu mnFile = new JMenu("File");
menuBar.add(mnFile);
MenuItem mntmExit = new JMenuItem("Exit");
mntmExit.setIcon(new ImageIcon(Main.class.getResource("/javagui/resources/img16x16/delete-icon.png")));
mnFile.add(mntmExit);
Jak widać u mnie przy systemowym look and feel nie ma dużego marginesu. Ale ja trochę inaczej tworzę MenuItem - przekazuję ikonę w konstruktorze, może wtedy powstają inne marginesy.
Tworzenie w konstruktorze niczego nie zmienia...
ImageIcon exitIcon = new ImageIcon("src/javagui/resources/img16x16/delete-icon.png");
JMenuItem mntmExit = new JMenuItem("Exit", exitIcon);
Twój Look and Feel to zdaje się Metal. Jak sam stosuję metal to też jest u mnie wszystko w porządku z tą ikoną. Możesz pokazać fragment kodu, w którym określasz Look and Feel? U mnie jest to:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Ja korzystałem w tym programie z domyślnego look and feel, tzn. Metal. Nigdy nie zmieniam na Windows (tzn. na systemowy), często zmieniam na Nimbus. Po wyborze Look&Feel 'Windows' rzeczywiście wygląda źle.
Powinno pomóc wywołanie setMargin, dla Metal i Nimbus getMargin() zwraca 0, dla Windows zwraca javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14]
Na rzecz jakiego obiektu mam wywołać metodę setMargin? Próbowałem dla jMenuItem i JMenu, ale nic nie zmienia.
Miałem na myśli JMenuItem, ale nie sprawdzałem. Fragment dokumentacji metody setMargin w klasie AbstractButton (JMenuItem dziedziczy po niej): Sets space for margin between the button's border and the label. Setting to null will cause the button to use the default margin. The button's default Border object will use this value to create the proper margin. However, if a non-default border is set on the button, it is that Border object's responsibility to create the appropriate margin space (else this property will effectively be ignored).
Ok dzięki. Należało ustawić lewy margines na ujemną wartość:
ImageIcon exitIcon = new ImageIcon(
"src/javagui/resources/img16x16/delete-icon.png");
JMenuItem mntmExit = new JMenuItem("Exit", exitIcon);
mntmExit.setMargin(new Insets(2, -15, 2, 2));