ImageIcon не отображается в верхнем левом окне приложения

У меня есть этот код:

 public DesktopApplication1View(SingleFrameApplication app)
    {
        super(app);
        pbu.registriere(this);

        ImageIcon icon = new ImageIcon("resources/BilKa_Icon_32.png");
        this.getFrame().setIconImage(icon.getImage());

        initComponents();

Мне интересно, почему значок изображения не отображается в левом верхнем углу окна приложения. Вместо этого это все еще логотип чашки кофе Java.

Что-то не так?

Спасибо


person hectichavana    schedule 25.09.2011    source источник
comment
is icon.getImageLoadStatus() == MediaTracker.COMPLETE   -  person Mike K.    schedule 25.09.2011
comment
ваш вопрос может быть дубликатом: stackoverflow.com/questions /7194734/   -  person Jessica Brown    schedule 25.09.2011
comment
не совсем, потому что в данном случае я не имею никакого отношения к JFrame   -  person hectichavana    schedule 25.09.2011
comment
Я пробовал это, я тоже не знаю, в чем проблема, но иногда смотрю здесь от авторов этого фреймворка, может быть, дайте нам ответ :-)   -  person mKorbel    schedule 26.09.2011
comment
this.getFrame() возвращает экземпляр Frame или JFrame. Вы описали свой вопрос как качающийся как в заголовке, так и в тегах, это не является необоснованным предположением, что ваш фрейм является JFrame, а не фреймом AWT.   -  person Jessica Brown    schedule 28.09.2011


Ответы (2)


Вероятно, ваш путь к ресурсу может быть неправильным. В зависимости от вашей файловой иерархии, а также от того, находятся ли ваши файлы классов в банке и т. д., вам может понадобиться «/» в начале пути перед res, чтобы сделать путь абсолютным, а не относительным. Учебник: http://download.oracle.com/javase/1.5.0/docs/guide/lang/resources.html

Если вы достаточно уверены, что правильно читаете изображение (хорошим тестом было бы создать фиктивный компонент внутри вашего окна и посмотреть, сможете ли вы загрузить в него изображение), вам следует изучить следующий элемент Руководство по фреймам/окнам верхнего уровня, в частности части об оформлении окон. В частности, одна вещь, которую вы, возможно, не делаете (я не могу сказать из вашего фрагмента), заключается в том, что вам может потребоваться установить JFrame.setDefaultLookAndFeelDecorated(true); до создания фрейма... что вы не сможете сделать, используя this.getFrame(), но нужно сделать где-то раньше в вашем коде инициализации.

person Jessica Brown    schedule 25.09.2011
comment
все кажется правильным, включая путь к ресурсу, потому что в другом поле я установил изображение в той же папке (ресурсе) и использую ту же запись - person hectichavana; 25.09.2011
comment
вы используете ОС с учетом регистра? Я заметил, что у вас есть заглавные буквы в имени файла изображения. - person Jessica Brown; 25.09.2011
comment
Кадр JFrame = новый JFrame(FrameDemo); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel emptyLabel = новый JLabel(); emptyLabel.setPreferredSize (новый размер (175, 100)); frame.getContentPane().add(emptyLabel, BorderLayout.CENTER); frame.setIconImage(новый ImageIcon(/resources/BilKa_Icon_32.png).getImage()); Я поместил их в класс, но появилось новое окно, но значок нового окна также не изменился. - person hectichavana; 25.09.2011
comment
Вы тестировали демонстрационный проект из учебника по новому окну? Работает ли это для вас? Это работает для меня на моей машине. Если это работает, это сужает проблему до чего-то в вашем коде, а украшения окон не работают в вашей версии ОС/java/и т. д. Исходный код связан с этим руководством, просто нужно создать пакет (и при желании добавить jpg) и скомпилировать/запустить: http://download.oracle.com/javase/tutorial/displayCode.html?code=http://download.oracle.com/javase/tutorial/uiswing/examples/components/FrameDemo2Project/src/components/FrameDemo2.java - person Jessica Brown; 28.09.2011

Майк К. прав, ImageIcons могут загружаться динамически, а изображения могут иметь нулевой размер при первой инициализации. Также обратите внимание, что в Unix и в JAR имена чувствительны к регистру.

попробуй это:

 try{
   ImageIcon icon = new ImageIcon("resources/BilKa_Icon_32.png");
   MediaTracker mt=new MediaTracker(this);
   mt.addImage(icon.getImage(),0);
   mt.waitForAll();
   this.getFrame().setIconImage(icon.getImage());
 }catch(InterruptedException excp){}

--

ОК, извините, я отредактировал addImage - он требует дополнительного идентификатора параметра, который может быть любым числом. Что касается вашей ошибки «нет такого конструктора», она говорит вам, что вам нужно передать Component конструктору. Окно вашего приложения является компонентом, поэтому вы должны передать его здесь в качестве параметра. Я использовал this, потому что большинство людей помещают этот код внутри class, который расширяет Frame, Window или JFrame. Так что используйте

MediaTracker mt=new MediaTracker(this.getFrame());
person Sanjay Manohar    schedule 25.09.2011
comment
Я получил эту ошибку: Конструктор MediaTracker (DesktopApplication1View) не определен. И мне нужен еще один параметр для mt.addImage - person hectichavana; 25.09.2011