2016-01-16 2 views
-2

Я пытаюсь отобразить BufferedImage на JPanel, но когда я запускаю программу, он ничего не отображает.Печать BufferedImage на JPanel

Я предполагаю, что это проблема с созданием BufferedImage, но, с моим ограниченным пониманием Java, я понятия не имею, что это за проблема. Кроме того, я хотел бы получить дополнительную информацию о методе paintComponent (что делает super.paintComponent (г) означает?)

Main.java

public class Main { 
public static void main (String[] args) { 
    Window.windowMake("This is a window"); 
} 
} 

Window.java

import java.awt.image.BufferedImage; 
import java.awt.Graphics; 
import java.awt.Image; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.imageio.ImageIO; 

public class Window extends JFrame { 
public static void windowMake(String title) { 
    JFrame jf = new JFrame(); 
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    jf.setSize(300,300); 
    jf.setVisible(true); 
    jf.setTitle(title); 
    jf.add(new Paint()); 
} 
} 

Paint.java

import java.io.IOException; 
import java.io.File; 
import java.awt.image.BufferedImage; 
import java.awt.Graphics; 
import javax.swing.JPanel; 
import javax.swing.JFrame; 
import javax.imageio.ImageIO; 

public class Paint extends JPanel { 
BufferedImage sprite = new 
BufferedImage(60,60,BufferedImage.TYPE_INT_ARGB); 

public void createBufImg() { 
    try { 
    sprite = ImageIO.read(new File("/Images/Scene.png")); 
    System.out.println("File read"); 
    } catch (IOException e) { 
    System.out.println("Could not read image"); 
    } 
} 

@Override 
    public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawImage(sprite,20,20,this); 
} 
} 
+0

код даже не компилирует строку BufferedImage sprite = new; isnt действительный syntex – Ryan

+0

Он компилировался ранее ... Я предполагаю, что я изменил строку между тем, когда я последний раз запускал код, и когда я скопировал и вставил его. –

+0

back to top (я не знаю, работает ли это на этом сайте) –

ответ

0

Добавьте конструктор класса Paint, который создает спрайт и ваша программа покажет изображение.

public Paint() { 
    super(); 
    createBufImg(); 
} 

Кроме того, вы должны, как правило, не называть свои классы с теми же именами классов и методов в Качели, что становится слишком запутанным. Поэтому не делайте классы под названием Main, Panel и Window.

что делает super.paintComponent (г) означает

Это вызывает paintComponent метод суперкласса, то есть класс вы расширяете (JPanel в данном случае). Я предлагаю вам посмотреть подробности в Интернете о живописи в Swing для получения более подробной информации.

+0

спасибо, теперь он работает, но он записывает «не удалось прочитать изображение» –

+0

@CharlieLandrigan Возможно, потому что файл изображения не расположен там, где вы ищете он с 'новым файлом («/Images/Scene.png »)'. Вместо относительного пути попробуйте абсолютный путь (например, 'C:/Temp/Scene.png'). То, как вы ищете изображение в коде, имеет путь к тому месту, где вы запускаете программу. Это должно быть точно для файла, который будет найден. –

+0

Я избавился от первого «/», и это исправило его, большое спасибо за вашу помощь! –

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