2013-12-23 3 views
-1

У меня есть два класса. Class GUI расширяет JFrame и должен отображать на экране a JPanel, который является классом Surface, который расширяет JPanel.Попытка отображения изображения на экране в Java, не работает

Класс Поверхность имеет метод paintComponent, который должен отображать изображение, но по какой-то причине он не отображает его. Вот код:

import javax.swing.*; 

public class GUI extends JFrame { 

    GUI(){ 
     initUI(); 
    } 

    public void initUI(){ 
     Surface s = new Surface(); 
     add(s); 
     pack(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public static void main(String[]args){ 
     GUI gui = new GUI(); 
     gui.setVisible(true); 
    } 

} 

import java.awt.*; 
import javax.swing.*; 

public class Surface extends JPanel { 

    Image image; 
    ImageIcon ii; 

    public void paintComponent(Graphics g) { 

     super.paintComponent(g); 

     Graphics2D g2d = (Graphics2D) g; 

     ii = new ImageIcon("redsquare.png"); 
     image = ii.getImage(); 

     Dimension d = new Dimension(); 
     d.width = image.getWidth(null); 
     d.height = image.getHeight(null); 
     this.setPreferredSize(d); 

     g2d.drawImage(image,50,50,null); 

    } 

} 
+0

Где находится файл PNG? Поместите его в корневую папку проекта. –

+2

никогда не загружать изображение внутри paintComponent (ii = new ImageIcon («redsquare.png»);), создайте локальную переменную для этого объекта. – mKorbel

+1

. В стороне это может быть достигнуто путем отображения изображения в 'JLabel' с 50px 'EmptyBorder'. –

ответ

2

Похоже проблема в вашем местоположение файла, попробуйте следующий код для получения PNG из ресурсов проекта:

ii = new ImageIcon(getClass().getResource("redsquare.png")); 

для этого примера файла redsquare.png в том же пакете Surface класса.

1

Если вы используете IDE как Eclipse, или Netbeans, используя этот относительный путь «redsquare.png», вы изображение должно быть непосредственно в корневом каталоге проекта

ProjectRoot 
     redsquare.png 
     src 
     bin 

Кроме того, прислушайтесь к мудрые слова @mKorbel

никогда "никогда не загружать изображения внутри paintComponent (II = новый ImageIcon (" redsquare.png ");), создать локальную переменную для этого объекта" - @ mKorbel

Кроме того, для встроенных ресурсов вы должны действительно рассмотреть ответ @ alex2410. Вы хотите загрузить изображения из класса.

0

Может быть проблемой с расположением изображения кажется Попробуйте запустить с другим источником изображения

+0

Я бы сказал, что «это не ответ, но может сделать хороший комментарий». OTOH, который был отмечен ранее в этом потоке, и является просто шумом. –

Смежные вопросы