java Swing Image输出

问题描述

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处代码却可以输出图片?两处的代码是完全一样的啊。。。。

解决方案

使用ImageIO这个能够保证图片被正确加载。
解决方案二:
//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 blocke.printStackTrace();} ; g.drawImage(image ,(getWidth() - ICON_WIDTH)/2, (getHeight() - ICON_WIDTH)/2,null); }
解决方案三:
因为图像数据还未完全加载public void paint(Graphics g) {// g.drawImage(image, (getWidth() - ICON_WIDTH) / 2, (getHeight() -// ICON_WIDTH) / 2, null); // 1Image 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();}}
解决方案四:
你用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的话,就会多次被创建新对像了

时间: 2025-01-14 19:08:58

java Swing Image输出的相关文章

新手入门:Java Swing的基础知识全接触

1.前言: 当我们学习过了java中的基本语法,并且熟悉java的面向对象基础以后,我们就可以开始简单的Swing程序的设计,用过Vb的朋友可能会被它的简单的设计用户界面方法所吸引,只需要拖几个控件到窗体上,为每个空件编写event就可以简单的实现界面设计.但是强大的java也不比vb逊色.同样可以设计出精美的界面. 2.Swing概述: 当java1.0刚刚出现时还没有swing,当时的GUI基本编程库,sun取名叫AWT(Abstract Window Tookit),基本AWT库处理用户界

java-请熟悉Java swing的大神帮忙看下这是什么控件

问题描述 请熟悉Java swing的大神帮忙看下这是什么控件 就是常见的这种提示框,Java有没有这种控件?叫什么名字? 解决方案 这是用JComponent的一个方法实现的,方法名为public void setToolTipText(String text) 例如我最近用给 JLabel添加提示语, 代码如下: JLabel lbl_setOutput = new JLabel(); ...... lbl_setOutput.setToolTipText("修改输出目录"); 效

在用java swing 时遇到关于设置背景图片的问题

问题描述 在用java swing 时遇到关于设置背景图片的问题 public class LoginPanel extends JPanel { protected ImageIcon icon;//protected的访问权限是同一个包的类即可访问它 public int width,height; public LoginPanel(){ super();//调用父类的构造方法,此处可以不显示调用,系统会自动隐式调用 icon=new ImageIcon("res/login.jpg&qu

Java swing中Jlist怎么判断里面是否有数据?谢谢

问题描述 Java swing中Jlist怎么判断里面是否有数据?谢谢 因为布局需要,所有我在开始就new了: private DefaultListModel<String> listModel = new DefaultListModel<>();private JList<String> buttonList = new JList<>(listModel); 中间是监听数字按钮,并动态的将按钮上的值放入buttonList. 最后要监听一个MC按钮,

swing-请教:Java Swing分割字符串的问题

问题描述 请教:Java Swing分割字符串的问题 我用Java Swing写了一个小程序,这是片段: 希望达到的效果是:输入字符串"a b c",点击按钮以后输出"ad bd cd",也就是中间有空格.但实际上输出的是"adbdcd",没有空格. 我想向大家请教:要怎样修改,才可以输出有空格的新字符串呢?谢谢大家. 解决方案 String s3 = s2[i] + "d ",在d后面加一个空格 解决方案二: 把字符串使用数

Java之JFrame输出Helloworld实例_java

本文实例讲述了Java之JFrame输出Helloworld的方法.分享给大家供大家参考.具体如下: JAVA的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化.最小化.关闭.Swing是一个用于开发Java应用程序用户界面的开发工具包.以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格.Swing开发人员只用很少的代码就可以利用Swing丰富.灵活的功能和模块化组件来创建优雅的用户界面. 说白了,你只需要很少的代码,就能利用JAVA

请问Java Swing编程里怎样将一个Image里的数据复制到另一个Image里?

问题描述 请问Java Swing编程里怎样将一个Image里的数据复制到另一个Image里? 请问如何将一个Image里的所有数据复制到另一个Image(比如Image2)里?让Image里的数据与Image2里的数据相同,对Image的数据进行操作时,对Image2无影响 解决方案 http://www.iteye.com/problems/80309

理解Java Swing中的Accelerator Key

前言:没事在看<Java Swing, 2nd Edition>,看到有个东西还是蛮有趣的说,就是Accelerator key,呵呵,好像要配合Alt一起用才能起到作用.蛮多东西是看了程序后才发现原文的意思的.这次算是插曲,不在MapsEditor的范围之内.顺便提一下,中午起来有3到4个人加了群,蛮开心的.高手也好初学也罢,大家重要的是交流,大胆说出自己的想法,错了就错了,谁没错过啊-- 关于Accelerator key,在做GUI的时候还是比较重要的吧,至少以前认为那些不用鼠标的人蛮高

java swing 视频-我是一名在校研一的学生,现在急需要java swing的视频,谁能推荐一下啊!谢谢啦

问题描述 我是一名在校研一的学生,现在急需要java swing的视频,谁能推荐一下啊!谢谢啦 我是一名在校研一的学生,现在急需要java swing的视频,谁能推荐一下啊!谢谢啦 解决方案 http://v.baidu.com/v?s=8&word=java%20swing%20%CA%D3%C6%B5&fr=ala11 解决方案二: 参考:http://www.java1234.com/a/yuanchuang/swing/ 解决方案三: http://school.itzcn.com