У меня возникли проблемы с покраской изображения в моей GraphicsPanel (расширение JPanel). Я попробовал загрузку из файла с именем пути, используя getCodeBase(), getDocumentBase(), getResource() и используя BufferedImage. Есть ли способ рисовать изображение, не делая его ImageIcon внутри JLabel?Невозможно нарисовать изображение в моем JPanel
package rpg;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JPanel;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import java.awt.image.BufferedImage;
public class GraphicsPanel extends JPanel implements MouseListener, MouseMotionListener {
private WorldBuilder wb;
public int currentTileType = 0;//tile types. 0=bgtile, 1=object, 2=NPC
public String currentTileName = "";
public Image currentTile;
public GraphicsPanel() {
super();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
g.fillRect(0, 0, 720, 528);
g.drawImage(currentTile, 100, 100, this);//Nothing gets drawn here
}
public void getParameters(WorldBuilder wb) {
this.wb = wb;
this.currentTileType = wb.currentTileType;
this.currentTileName = wb.currentTileName;
/*
try {
currentTile = ImageIO.read(new File("SpriteSheet.png"));
} catch (IOException e) {
System.out.println("failed");
}
*/
currentTile = new ImageIcon("SpriteSheet.png").getImage();
repaint();
}
@Override
public void mouseClicked(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void mousePressed(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void mouseReleased(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void mouseEntered(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void mouseExited(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void mouseDragged(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void mouseMoved(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
Картины на '100x100' может быть картины за пределами видимого диапазона компонента. 'ImageIcon (String)' ожидает, что 'String' является ссылкой на файл, поэтому изображение является встроенным ресурсом, изображение не будет найдено. Попробуйте использовать 'ImageIO.read' вместо этого, поскольку он по крайней мере выбросит' IOException', когда что-то пойдет не так ... – MadProgrammer
Компонент имеет размеры 720x528. Раньше я использовал ImageIO.read, но это тоже не сработало. На данный момент я просто поместил файл изображения в тот же каталог, что и файл java, чтобы проверить его, так как чтение прямо из ссылки на файл должно работать именно так. – ixin
Прежде всего, вы не предоставили достаточно информации, чтобы сделать «предположение» о размере компонента. Во-вторых, если файл изображения находится в том же «пакете», что и файл класса («rpg'), то путь к файлу неверен, из контекста приложения он будет больше похож на« rpg/SpriteSheet.png ». Вы можете сделать 'System.out.println (новый файл (« SpriteSheet.png »). Exists());', чтобы проверить его, он скорее всего напечатает 'false'. Если «SpriteSheet.png» находится в контексте приложения, попробуйте использовать «ImageIO.read» (getClass(). GetResource («SpriteSheet.png»)). – MadProgrammer