setImageIcon не устанавливает значок JFrame в окне Mac Swing
Я уже пробовал загружать код из стека. По какой-то причине это просто не устанавливает ImageIcon для моего JFrame, комментарии - это другие попытки, которые не сработали, я избегал вызова super, чтобы я мог ссылаться на JFrame - GUIPhotoAlbum extends
JFrame; код:
public GUIPhotoAlbum ()
{
super("PhotoAlbum");
ImageIcon img = new ImageIcon("Photos/albumIcon.png");
this.setIconImage(img.getImage());
/*
try{
setIconImage(ImageIO.read(new File("Photos/albumIcon.png")));
}catch(Exception e){
System.out.print("Didn't work.");
}
*/
setSize(875, 625);
this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
this.setLayout(new BorderLayout(5, 5));
initComponents();
initMenuBar();
initTopPanel();
add(topPanel, BorderLayout.CENTER);
initBottomPanel();
add(bottomPanel, BorderLayout.SOUTH);
addListeners();
setLocationRelativeTo(null);
setVisible(true);
}
РЕДАКТИРОВАТЬ Я запускаю программу, как это, где я пытаюсь установить ImageIcon JFrame в GUIPhotoAlbum()
конструктор; вот водитель:
public class AlbumDriver
{
public static void main (String [ ] args)
{
SwingUtilities.invokeLater
(
new Runnable()
{
@Override
public void run()
{
GUIPhotoAlbum pa = new GUIPhotoAlbum();
}
}
);
}
}
Что я здесь не так делаю?
PS я пробовал BufferedImage
, ImageIcon
, с помощью File
.. и я использую Mac
3 ответа
Mac не поддерживает значки кадров, как видно из этого ответа.
Используйте это, чтобы изменить Dock Image в Mac:
File imageFile = new File("Your image Path");
Image image = ImageIO.read(imageFile);
Application.getApplication().setDockIconImage(image);
Для окон используйте это:
YourFrameObject.setIconImage(image);
Проблема в том, что ваш класс расширяется от JFrame
но вы создаете новый экземпляр JFrame
и вместо этого установить его значок...
JFrame newFrame = new JFrame("PhotoAlbum");
ImageIcon img = new ImageIcon("Photos/albumIcon.png");
newFrame.setIconImage(img.getImage());
Не создавайте второй экземпляр JFrame
нет необходимости newFrame
в этом случае...
Например...
public GUIPhotoAlbum ()
{
super("PhotoAlbum");
ImageIcon img = new ImageIcon("Photos/albumIcon.png");
setIconImage(img.getImage());
/*
//when uncommented, exception is never thrown
try{
setIconImage(ImageIO.read(new File("Photos/albumIcon.png")));
}catch(Exception e){
System.out.print("Didn't work.");
}
*/
// Hint use pack instead, but only after
// You've finished adding the components to the frame
setSize(875, 625);
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout(5, 5));
initComponents();
initMenuBar();
initTopPanel();
add(topPanel, BorderLayout.CENTER);
initBottomPanel();
add(bottomPanel, BorderLayout.SOUTH);
addListeners();
setLocationRelativeTo(null);
setVisible(true);
}