001 package org.util.html.objects;
002
003 import java.util.*;
004 import java.io.*;
005 import java.net.*;
006 import java.awt.*;
007 import java.awt.image.*;
008 import java.awt.event.*;
009 import javax.swing.*;
010 import javax.swing.event.*;
011
012 public class HTMLImg extends HTMLObject {
013
014 private HTMLImg this_ = this;
015 private JComponent component_;
016 private URL url_;
017 private BufferedImage image_;
018 private Dimension preferred_size_;
019
020 public HTMLImg(HTMLDocument root) {
021 super(root);
022 try{
023 SwingUtilities.invokeAndWait(new Runnable(){public void run(){
024 component_ = new JComponent() {
025 public void paint(Graphics g) {
026 int w = getWidth();
027 int h = getHeight();
028 if(image_ == null) {
029 g.setColor(Color.black);
030 g.setFont(new Font("monospace", Font.PLAIN, 8));
031 URL url = getURL();
032 if(url!=null) {
033 String url_text = url.toString();
034 int d = 15;
035 for(int i=0; i<url_text.length()/d; i++)
036 g.drawString(url_text.substring(i*d, Math.min((i+1)*d, url_text.length())), 3 ,8*i+10);
037 }
038 g.setColor(Color.red);
039 g.drawRect(0,0,w-1,h-1);
040 } else {
041 g.drawImage(image_, 0, 0, w, h, component_);
042 }
043 }
044 };
045 component_.setPreferredSize(new Dimension(100, 100));
046 }});
047 }catch(Exception exc){}
048 }
049 public void setURL(URL url) {
050 url_ = url;
051 new Thread(new Runnable(){
052 public void run(){
053 try{
054 image_ = javax.imageio.ImageIO.read(url_);
055 if(preferred_size_ != null) {
056 int hint = Image.SCALE_FAST;
057 image_ = (BufferedImage)image_.getScaledInstance((int)preferred_size_.getWidth(), (int)preferred_size_.getHeight(), hint);
058 }
059 component_.setPreferredSize(new Dimension(image_.getWidth(), image_.getHeight()));
060 component_.revalidate();
061 getRoot().changed(this_);
062 }catch(Exception exc){
063 exc.printStackTrace();
064 }
065
066 }
067 }).start();
068 }
069
070 public void setPreferredSize(Dimension size) {
071 preferred_size_ = size;
072 }
073 public URL getURL() {
074 return url_;
075 }
076 public JComponent getPanel() {
077 return component_;
078 }
079 }