package com.boco.eoms.myk; import java.awt.Color; import java.awt.Event; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.Toolkit; import java.io.DataInputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; /** * 如果用URL获取图片文件就不能使用openstream()方法而是使用方法getImage(URL), * 这个方法会立即生成一个IMAGE图象,并返回程序对对象的引用,但这并不意味着图形文件已经到达了内存当中, * 而是系统与此同时产生一个线程取读取图像文件的数据。因此可能出现这样的情况, * 程序已经执行到了getImage(URL)后面的语句,但是系统还在读取图形文件的情形 * 继承Frame窗口,得到一个带标题窗口 * @author a */ public class GetDataByUrl extends Frame{ MenuBar menuBar; boolean drawImage = false; DataInputStream dataInputStream; int i =0; String line_str; boolean first = true; Font font; public GetDataByUrl(){ //生成一个菜单条 menuBar = new MenuBar(); setMenuBar(menuBar); //为菜单条第一个菜单取名"display" Menu display = new Menu("display"); menuBar.add(display); //生成display菜单下的两个菜单项 MenuItem beauty_display = new MenuItem("display beauty"); MenuItem text_display = new MenuItem("display text"); display.add(beauty_display); display.add(text_display); //设置背景颜色和文本的字体 setBackground(Color.WHITE); font = new Font("System",Font.BOLD,12); //设置带有菜单的窗口的标题 setTitle("sample:use URL get data"); setSize(400,300); //显示窗口 show(); } /** * 处理窗口中的菜单事件,该方法自动监听事件 * evt为事件 * what为按钮上的文本内容 */ public boolean action(Event evt,Object what){ if(evt.target instanceof MenuItem){ String message = (String)what; if(message.equalsIgnoreCase("display beauty")){ drawImage = true; doDrawImage(); }else{ drawImage = false; first = true; if(message.equalsIgnoreCase("display text")){ doWrite("file:///d://a.txt"); } } } return true; } //处理窗口事件 public boolean handleEvent(Event evt){ switch(evt.id){//事件类型 case Event.WINDOW_DESTROY: dispose();System.exit(0); default:return super.handleEvent(evt); } } /** * 绘图 */ public void paint(Graphics g){ if(drawImage){ try { //生成一个url对象,指向本机的一个图片 URL image_url = new URL("file:///d:/b.JPG"); Toolkit object_toolkit = Toolkit.getDefaultToolkit(); Image object_image = object_toolkit.getImage(image_url); g.setColor(Color.WHITE); g.fillRect(0, 0, 300, 400); g.drawImage(object_image,40,80,160,200,this); } catch (MalformedURLException e) { e.printStackTrace(); } }else{ if(first){//首次输出文字时,设置画笔 first = false; g.setColor(Color.WHITE); g.fillRect(0, 0, 300, 400); g.setFont(font); } if(line_str!=null){ g.drawString(line_str, 10, i*20);//使i坐标递增 i++; } } } //写文本函数,他的参数是指向绝对url的一个字符串 private void doWrite(String url_str) { try { URL url = new URL(url_str); dataInputStream = new DataInputStream(url.openStream()); i = 1; line_str = dataInputStream.readLine(); while(line_str!=null){ paint(getGraphics()); line_str = dataInputStream.readLine(); } } catch (Exception e) { try { dataInputStream.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } e.printStackTrace(); } } //画图像函数 private void doDrawImage() { drawImage = true; repaint();//自动调用paint()方法 } public static void main(String[] args) { new GetDataByUrl(); } }