2015-03-05 2 views
0

Я и друг делаю игру, и хорошо, ни один из нас не знает, как сделать GUI. Я также неопытен в Java (любительский программист на С ++), поэтому есть то, с чем вы работаете здесь, когда я понимаю, что я делаю.My JFrame не показывает JLabel с изображением

Я написал код для отображения JFrame с JLabel с изображением. И код загружается нормально, но картинки там нет.

Вот что я получил:

package game; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.SwingUtilities; 


public class Pic extends JFrame{ 
    private static final long serialVersionUID = 1L; 

    public Pic(){ 
     JFrame pic = new JFrame("JFrame"); 
     JLabel player = new JLabel(); 
     ImageIcon player_icon = new ImageIcon(getClass().getResource("/res/Untitled.bmp")); 
     player.setIcon(player_icon); 
     player.setVisible(true); 
     player.setSize(100, 100); 
     pic.setVisible(true); 
     player.setLocation(25, 25); 
     pic.setSize(200, 200); 
    } 

    public static void main (String[] args){ 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new Pic(); 
      } 
     }); 
    } 
} 

Это не является частью самой игры, но тестовый запуск со случайным спрайта положить в пакет с именем Рез. Теперь мой вопрос: Что я сделал неправильно, где не вижу свою фотографию, и как я могу это исправить?

Я также очень благодарен за подробный ответ/ссылку, которая может помочь в обучении графическим интерфейсам, а также я не могу понять некоторые из более старых объяснений, которые я нашел здесь.

+0

[Создание графического интерфейса с помощью JFC/Swing] (http://docs.oracle.com/javase/tutorial/uiswing/), [Как использовать ярлыки] (http: // docs .oracle.com/javase/tutorial/uiswing/components/label.html) – MadProgrammer

ответ

3

ImageIcon не поддерживает bmp формат файла, он поддерживает gif, jpeg и png

Вместо этого попробуйте использовать ImageIO. См Reading/Loading an Image для более подробной информации

BufferedImage img = ImageIO.read(getClass().getResource("/res/Untitled.bmp")); 
ImageIcon player_icon = new ImageIcon(img); 

Кроме того, вы не добавляя JLabel ни к чему ...

pic.add(label); 

Также ...

player.setVisible(true); 
player.setSize(100, 100); 

бессмысленны, компоненты Свинг являются видимый по умолчанию, и кадр использует диспетчер компоновки

It mi ght поможет сохранить Creating a GUI With JFC/Swing книга отмечена.

Вы, вероятно, также найти How to Use Labels некоторого использования, а также

+0

+1 для [поддерживаемых типов изображений для 'ImageIcon'] (http://docs.oracle.com/javase/6/docs/api/javax/swing/ImageIcon.html#ImageIcon (byte [])). – Obicere

+0

Спасибо за уведомление о несовместимости на картинке, я также не знал, что качели были дефолтны видимыми. – Episha

+0

@Episha Только компоненты, по умолчанию невидимые (и 'JInternalFrame') – MadProgrammer

1

, но изображения нет.

Я не вижу, где вы добавить ярлык к раме:

pic.add(label); 

Я также очень ценю подробный ответ/ссылку, которая могла бы помочь с обучением ГПИ

Начните с учебника Swing. См. How to Use Icons.

+0

Я чувствую себя невероятно глупым ... Но спасибо за ссылку и помощь. Я действительно должен смотреть больше. – Episha

2

вы забыли добавить JLabel в JFrame ..

pic.add(player); 
0

EDIT: Ok спасибо за указание, что из madprogrammer.Узнал что-то новое

На ваш другой вопрос, хороший графический интерфейс учебник, я нашел раздел с графическим интерфейсом this book очень полезно

+0

В этом случае это означает, что для каждого элемента в пути класса начинаются с корня, иначе он будет начинаться с местоположения пакета класса, который пытается прочитайте ресурс ... – MadProgrammer

0

Это может быть возможным решением !!

ImageIcon player_icon = new ImageIcon (getClass(). GetResource ("/ res/Untitled.bmp"));

JLabel player = новый JLabel (player_icon); // добавить изображение в JLabel

pic.add (player); // добавьте эту метку в JFrame