Я создал программу на Java, которая загружает изображение из интернета, дает ссылку и сохраняет его в определенную папку на моем компьютере после нажатия кнопки в графическом интерфейсе.Далее я хочу отобразить это изображение на экране.Обратите внимание, что ввод URL-адреса - это не обязательно URL-адрес самого изображения, а HTML-страница, содержащая изображение.Проблема в том, что я не могу просто создать объект ImageIcon с упреждением, потому что файл изображения еще не существует в системе еще во время компиляции.
Класс панели
public class AdditionPanel extends JPanel
{
// ...
static JTextPane textpane;
JLabel paneInstructions;
JButton linkOk;
public AdditionPanel() throws IOException
{
textpane = new JTextPane();
paneInstructions = new JLabel("Paste the link here:");
linkOk = new JButton(" OK ");
// ...
linkOk.addActionListener(new LinkOkPressed());
// ...
this.add(textpane);
this.add(paneInstructions);
this.add(linkOk);
}
}
У меня была идея создать ActionListener для этой кнопки и попытаться получить доступ к файлу только после нажатия кнопки, и, таким образом, файл был загружен.В этом случае я не знаю, как сделать изображение на JPanel из другого класса.
Слушатель действий
public class LinkOkPressed implements ActionListener
{
JLabel test;
@Override
public void actionPerformed(ActionEvent e)
{
// ImageDownloader is a class I have created, that simply saves the image
// from the given URL in a predetermined directory
ImageDownloader.saveImage(ImageDownloader.getImageUrl(AdditionPanel.textpane.getText()));
ImageIcon poster = new ImageIcon(getClass().getResource("/resources/myimage.png"));
test= new JLabel(poster);
AdditionPanel.add(test); // Does not work
}
}
Итак, можноЯ добавляю изображение на панель из другого класса, или есть лучший способ получить доступ к файлу, который загружается во время выполнения приложения?Спасибо за помощь.
ImageDownloader
public class ImageDownloader
{
public static String getImageUrl(String imdbLink)
{
String imageLink = "";
try
{
Document doc = Jsoup.connect(imdbLink).get();
Elements divs = doc.getElementsByClass("poster");
Element poster = divs.first();
Elements image = poster.getElementsByTag("a");
Element downloadImage = image.first();
Elements img = downloadImage.getElementsByTag("img");
imageLink = img.attr("src");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return imageLink;
}
public static void saveImage(String imageLink)
{
BufferedImage image = null;
try
{
URL url =new URL(imageLink);
image = ImageIO.read(url);
ImageIO.write(image, "png", new File("C:\\...\\resources\\myimage.png"));
}
catch(IOException e)
{
e.printStackTrace();
}
}
}