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?
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);
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]
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).
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.