Цель этой небольшой программы для загрузки .jpg изображений и отображать его в классе Canvas продлен JPanel, который отображается в объекте JFrame в главном классе, например, так:Почему программа не вводит метод loadImage()?
Главного класс
<code>
package imageloader;
import java.awt.Graphics;
import javax.swing.JFrame;
public class ImageLoader {
public static void main(String[] args)
{
JFrame frame = new JFrame();
Canvas c = new Canvas();
Graphics g = frame.getGraphics();
Loader load = new Loader();
frame.setSize(500, 500);
c.setImage(load.loadImage());
frame.add(c);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
</code>
<h1>The Canvas class</h1>
<code>
package imageloader;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
public class Canvas extends JPanel
{
private BufferedImage img = null;
public Canvas()
{
this.setSize(500, 500);
this.setVisible(true);
}
@Override
public void paint(Graphics g)
{
g.drawLine(0, 0, 250, 250); // just to see if the Canvas is painting, and it does!
g.drawImage(img, 250, 250, null);
repaint();
}
public void setImage(BufferedImage img)
{
this.img = img;
}
}
</code>
<h1>The Loading class</h1>
<code>
package imageloader;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Loader
{
public BufferedImage loadImage()
{
BufferedImage im = null;
try
{
File f = new File("player.jpg");
im = ImageIO.read(f.getAbsoluteFile());
System.out.println("Loaded!"); // this did not apear in my Output-Console in Netbeans
}
catch (IOException e) {}
return im;
}
}
</code>
Мой главный вопрос уже задан в названии. Сначала я сравнил код с учебником по документации Java и изменил класс родителя с Canvas.java на компонент с небольшим эффектом. Посмотрите здесь для справки:
Тогда я нашел это с помощью Google:
Displaying an image in Swing (on StackOverflow)
С моей JFrame (или компонента по этому вопросу) и в самом деле выполнить DrawLine() функцию от (0 | 0) до (250 | 250), но это не было проблемой, но я попробовал paintcomponent() и paintComponents(), первый рисовал линию, но не изображение, и казался значительно медленнее, последний не рисовал Линия вообще, поэтому я снова переключился на метод paint().
До моего небольшого исследования я пробовал разные вещи самостоятельно. Я немного изменил класс Loader из Tutorial-Version.
Полный учебник доступен здесь: Link
Ну, вы молча выбросили IOException, это никогда не умный ход ... – John3136
Вы уверены, что ваш путь к player.jpg прав? –
Спасибо, Джон ... Я знаю, что смогу распечатать этот стек ... Рагху К Наир, да, я уверен, что картинка находится в той же папке, что и мой источник, поэтому у меня нет длинного пути и обойти это возможное опасность! Я ценю ваш вход ... плюс я изменил код, так что путь к файлу обнаружен классом File. –