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 }