0 0

java Swing Image输出5

package com.hello.model;

import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;

public class NewImage {

	public static void main(String[] args) throws IOException 
	{
		JFrame frame = new JFrame();
		Image image = new ImageIcon("icon/baidu2.gif").getImage().getScaledInstance(33, -1, Image.SCALE_DEFAULT);
		MyPanel canvas = new MyPanel(image);
		
		frame.add(new JScrollPane(canvas));
		frame.pack();
		frame.setVisible(true);	
	}

}

class MyPanel extends JPanel
{
	Image image ;
	final int ICON_WIDTH = 23;
	final int ICON_HEIGHT = 22;
	
	public MyPanel(Image image)
	{
		this.image = image;
	}
	public void paint(Graphics g)
	{
		//g.drawImage( image,(getWidth() - ICON_WIDTH)/2,(getHeight() - ICON_WIDTH)/2,null);  // 1
                g.drawImage( new ImageIcon("icon/baidu2.gif").getImage().getScaledInstance(33, -1,Image.SCALE_DEFAULT),(getWidth() - ICON_WIDTH)/2,(getHeight() - ICON_WIDTH)/2,null);               // 2
 
	}
}



为什么2 处代码没有输出,1处代码却可以输出图片?
两处的代码是完全一样的啊。。。。
 
2012年3月18日 17:25

4个答案 按时间排序 按投票排序

0 0

采纳的答案

使用ImageIO这个能够保证图片被正确加载。

2012年3月18日 18:41
0 0

    //g.drawImage( image,(getWidth() - ICON_WIDTH)/2,(getHeight() - ICON_WIDTH)/2,null);  // 1   
                g.drawImage( new ImageIcon("icon/baidu2.gif").getImage().getScaledInstance(33, -1,Image.SCALE_DEFAULT),(getWidth() - ICON_WIDTH)/2,(getHeight() - ICON_WIDTH)/2,null);               // 2   



1和2在这里是有区别的。
1在这里使用的是image这个实例不管你拉伸,收缩界面时,图像再次绘制时。都是这个对象。
2 在这里是给定了一个行的图片对象。

看上去你的代码逻辑确实没有问题。你的写法不是很好!

正确的写法:
	    public void paint(Graphics g)   
	    
	    {   
	        try {
				this.image = ImageIO.read(new File("C:\\tmp\\liuqing.jpg"));
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} ;
	        g.drawImage(image ,(getWidth() - ICON_WIDTH)/2,
	                				(getHeight() - ICON_WIDTH)/2,null);                  
	                
	    }  

2012年3月18日 18:40
0 0

因为图像数据还未完全加载

	public void paint(Graphics g) {
		// g.drawImage(image, (getWidth() - ICON_WIDTH) / 2, (getHeight() -
		// ICON_WIDTH) / 2, null); // 1
		Image image = new ImageIcon("d:/1.gif").getImage().getScaledInstance(33, -1, Image.SCALE_DEFAULT);
		waitForImage(this,image);
		g.drawImage(image, (getWidth() - ICON_WIDTH) / 2, (getHeight() - ICON_WIDTH) / 2, null); // 2

	}

	/**
	 * Wait for loading all image data into memory.
	 */
	public static void waitForImage(Component component, Image img) {
		MediaTracker tracker = new MediaTracker(component);
		try {
			tracker.addImage(img, 0);
			tracker.waitForID(0);
		} catch (InterruptedException ex) {
			ex.printStackTrace();
		}
	}

2012年3月18日 18:29
0 0

你用DEBUG方式启动,然后再在这里设置个断点,就会明白为什么 产生两个不同的结果

g.drawImage( new ImageIcon("icon/baidu2.gif").getImage().getScaledInstance(33, -1,      Image.SCALE_DEFAULT),(getWidth() - ICON_WIDTH)/2,(getHeight() - ICON_WIDTH)/2,null);    




MyPanel类下的paint会被多次执行,放在里面的代码new的话,就会多次被创建新对像了

2012年3月18日 18:02

相关推荐

    Java绘图板源码 画图源代码 Swing

    在Java编程领域,Swing库是用于创建图形用户界面(GUI)的重要工具,它提供了丰富的组件和功能。本项目是一个基于Swing实现的绘图板应用,具备基本的绘图和编辑功能,适合用于Java程序设计课程设计或者作为初学者...

    graalvm编译swing失败问题处理

    例如,`native-image`命令的输出会包含关于缺失类或方法的提示。然后,开发者可以: - 更新或替换不兼容的库。 - 使用GraalVM的`reflection-config.json`文件来显式指定反射使用。 - 添加对JNI库的支持,如通过`--...

    JAVA的类包说明。。.rar_java swing_java 网络_流媒体 java

    在这个"JAVA的类包说明"中,我们将探讨几个关键的Java技术领域,包括输入输出流、网络编程、图像处理、数据库连接(JDBC)以及Swing图形用户界面(GUI)。 1. **输入输出流**: Java的I/O流处理是其强大的特性之一...

    java_ImageViewer.rar_image_imageviewer.ja_java viewer_图像浏览_图像浏览器

    这个名为"java_ImageViewer.rar"的压缩包包含了实现这一功能的基本代码和相关资源。其中,`ImageViewer.java`是主要的源代码文件,而`www.pudn.com.txt`可能是提供额外信息或者下载来源的文本文件。 `ImageViewer....

    java_j2se_read_image_upload.rar_swing 文件_swing文件上传

    在Java的Swing库中,实现文件上传功能主要涉及到用户界面的设计和文件I/O操作。Swing提供了丰富的组件和API,使得我们可以构建出交互式的图形用户界面,包括用于文件选择的JFileChooser组件。以下是关于使用Java ...

    java 会移动的图像

    在"MoveImage.java"中,可能使用了`javax.swing.ImageIcon`类来加载"Java.jpg"图片,然后将其设置为一个`javax.swing.JLabel`或`javax.swing.JPanel`的图标。例如: ```java ImageIcon image = new ImageIcon("Java...

    java-gif图像与图形处理java-gif图像与图形处理

    打印文件登记薄则可能需要用到`java.awt.print.PrinterJob`类,它可以用来打印Java Swing组件或自定义的内容。 档案录入可能涉及解析文件内容,这可能需要使用`BufferedReader`来读取文本文件,或者使用`javax.xml....

    word文档转pdf

    在Java Swing应用中,首先需要设计一个简洁的用户界面,包含文件选择器(用于选择Word文档)、转换按钮和输出路径设置等元素。当用户点击“转换”按钮时,应用将使用Apache POI读取选定的Word文档内容,然后借助...

    java语言实现的修改图片大小

    这个主题主要涉及Java的图像处理技术,包括使用Java AWT(Abstract Window Toolkit)和Swing库。以下是对这个话题的详细解释: 1. **Java AWT 和 Swing 图像处理库** Java AWT 和 Swing 是Java提供的两个图形用户...

    java图片管理器(对刚学JAVA的人的提升有帮助)

    Java的Java Advanced Imaging (JAI)库或者JavaFX的Image和ImageView类可以用来处理图片,进行缩放、旋转等操作。 7. **数据库存储**: 为了记住用户的设置或图片信息,项目可能使用了数据库存储。Java提供JDBC(Java...

    java+swing打包jar成exe.pdf

    【Java + Swing 打包成EXE】\n\nJava应用程序通常是以JAR(Java Archive)格式发布的,但在Windows环境中,用户更习惯于执行.exe可执行文件。通过使用特定的工具,例如exe4j,我们可以将Java Swing应用程序打包成....

    JAVA_API1.6文档(中文)

    java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供...

    java源码包---java 源码 大量 实例

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    Java在Applet小程序中显示图片.rar

    一个简单的Java Applet类通常会继承`java.applet.Applet`或`javax.swing.JApplet`类,并包含必要的初始化方法,如`init()`和`paint()`。`init()`方法在Applet加载时调用,用于进行设置工作,而`paint()`方法则负责...

    Java图片查看器 源代码

    import java.awt.image.*;//图形图像的所有类的超类。必须以特定于平台的方式获取图像。 import java.awt.geom.AffineTransform; import java.io.*;//数据流、序列化和文件系统提供系统输入和输出 import java.util...

    dct-image-compression.rar_DCT compression java_dct java

    6. 文件I/O:处理输入的图像文件和输出的压缩结果,需要熟悉Java的文件输入输出操作。 标签 "dct_compression_java" 和 "dct_java" 明确指出了这个项目的核心技术是DCT和Java实现。开发者可能在学习或实践中,通过...

    Java实现图像模糊、锐化

    在Java中,我们可以利用Java AWT和Swing库中的`java.awt.image.BufferedImage`类来处理图像。这个类提供了读取、写入和修改图像像素的方法。同时,我们还需要`java.awt.Color`类来处理颜色信息。 **模糊处理** 模糊...

    Java JFreeChart 后台生成折线图

    对于更复杂的需求,如动态更新图表、交互式图表或实时数据展示,可能需要结合其他库,如JavaFX或Swing进行图形界面的开发。总的来说,JFreeChart提供了一个强大的工具箱,使Java开发者能够轻松地在后台生成各种类型...

    Java 1.6 API 中文 New

    java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 ...

    java开源包4

    JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在...

Global site tag (gtag.js) - Google Analytics