ImageIcon не отображается в верхнем левом окне приложения - PullRequest
1 голос
/ 25 сентября 2011

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

 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 чашка кофе вместо этого.

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

Спасибо

Ответы [ 2 ]

2 голосов
/ 25 сентября 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){}

-

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

MediaTracker mt=new MediaTracker(this.getFrame());
2 голосов
/ 25 сентября 2011

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

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

...