JMenuItem przesunięta ikona

JMenuItem przesunięta ikona
SZ
  • Rejestracja:około 16 lat
  • Ostatnio:około rok
0

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...

user image

Czym może to być spowodowane?

Antoniossss
  • Rejestracja:prawie 16 lat
  • Ostatnio:ponad 10 lat
0

Daj kod jakim dodajesz ten Exit do menu


www.toptraker.pl
TopTraker! - I wiesz co jest grane!
Mój własny projekt w Javie - najnowsza wersja już jest!
edytowany 1x, ostatnio: Antoniossss
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Jesteś pewien, że to nie jest wina obrazka?
Pozycję menu tworze tak:

Kopiuj
saveItem = new JMenuItem("Zapisz",new ImageIcon("resources/Exit.gif"));

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 2x, ostatnio: bogdans
SZ
  • Rejestracja:około 16 lat
  • Ostatnio:około rok
0

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

Kopiuj
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);
edytowany 1x, ostatnio: Szczech
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

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.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
SZ
  • Rejestracja:około 16 lat
  • Ostatnio:około rok
0

Tworzenie w konstruktorze niczego nie zmienia...

Kopiuj
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:

Kopiuj
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

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]


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 3x, ostatnio: bogdans
SZ
  • Rejestracja:około 16 lat
  • Ostatnio:około rok
0

Na rzecz jakiego obiektu mam wywołać metodę setMargin? Próbowałem dla jMenuItem i JMenu, ale nic nie zmienia.

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

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).


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
SZ
  • Rejestracja:około 16 lat
  • Ostatnio:około rok
0

Ok dzięki. Należało ustawić lewy margines na ujemną wartość:

Kopiuj
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));

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.