如何正确显示图片?

danseshi 2005-08-17 09:20:10
用getImage(getDoucmentBase(),xxx.gif);和drawImage(),怎么不能在JPanel中画啊?如何在组件中显示图片(不用JButton(Icon)和JLabel(Icon)显示图标的形式),比如在JPanel中,而不是通过继承JApplet在浏览器中显示。怎么才能实现呢?

在应用程序里(不在浏览器中显示),有背景图片和活动图片,活动图片运动时,怎么才能正确显示背景图片呢?
谢谢!
...全文
403 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenweionline 2005-08-19
  • 打赏
  • 举报
回复
试试在移动图片的时候调用JPanel的repaint()方法,重绘背景图。
danseshi 2005-08-19
  • 打赏
  • 举报
回复
不懂线程,帮忙看一下,怎么不能循环??

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Calendar;

public class Clock extends JPanel implements Runnable{

private static Thread timer;
private Image buffer;
Graphics gr;

static JFrame clockFrame;

public void paint(Graphics g) {

int d1,d2,d3, degree, x,y;
int x0 =80;
int y0 = 70;
double pend = 100.0;

buffer = createImage(600,600);

Graphics2D gr = ( Graphics2D ) buffer.getGraphics();

Calendar calendar = Calendar.getInstance();

degree = 30 * calendar.get(Calendar.HOUR)+ calendar.get(Calendar.MINUTE)/2;
d1 = 55;
gr.setStroke( new BasicStroke( 8.0f ) );
gr.setColor(Color.magenta);
x = x0 + (int) (d1* (double)Math.sin( degree*3.14/180));
y = y0 - (int) (d1 * (double)Math.cos( degree*3.14/180));
gr.drawLine(x0,y0, x,y);


degree = 6 * calendar.get(Calendar.MINUTE);
d1 = 75;
gr.setColor(Color.blue);
x = x0 + (int) (d1* (double)Math.sin( degree*3.14/180));
y = y0 - (int) (d1 * (double)Math.cos( degree*3.14/180));
gr.setStroke( new BasicStroke( 6.0f ) );
gr.drawLine(x0,y0, x,y);

degree = 6 * calendar.get(Calendar.SECOND);
d1 = 90;
d2 = 120;
d3 = 250;
gr.setColor(Color.orange);
x = x0 + (int) (d1* (double)Math.sin( degree*3.14/180));
y = y0 - (int) (d1 * (double)Math.cos( degree*3.14/180));
gr.setStroke( new BasicStroke( 3.0f ) );
gr.drawLine(x0,y0, x,y);

g.drawImage(buffer,0,0,this);
}

/* public void start() {
if(timer == null)
{ Runnable r=new Clock();
timer = new Thread(r);
timer.start();
}
}*/

public void stop() {
timer = null;
}

public void run( ) {

try {Thread.sleep(500);} catch (InterruptedException e) {}
repaint();

}

public void update(Graphics g) {

paint(g);

}


public static void main(String args[]) {

clockFrame=new JFrame("简单时钟");
Clock myClock=new Clock();

clockFrame.getContentPane().add("Center",myClock);
clockFrame.setSize(160,160);
clockFrame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {System.exit(0);}
});
clockFrame.setVisible(true);

if(true)
{ Runnable r=new Clock();
timer = new Thread(r);
timer.start();
}

}

}
chenweionline 2005-08-18
  • 打赏
  • 举报
回复
活动图片指的是gif吗?

可以试试重载JPanel的paint()方法画出背景图片,然后构造一个包含活动图片的ImageIcon将其添加进JLabel,在将JLabel加入JPanel。

可能还需要JLabel.setOpaque(false);
danseshi 2005-08-18
  • 打赏
  • 举报
回复
谢谢上边的

在《Java 2 图形设计卷Ⅰ:AWT》找到答案了

在应用程序里获取图像的引用,应用程序从Toolkit类中调用getImage()方法,而不是调用Applet.getImage()方法。

而我就犯了这个错误,没有好好看书,惭愧啊!
“磨刀不误砍柴工”真是没错啊!

不过第二个问题还请高人指点!
danseshi 2005-08-18
  • 打赏
  • 举报
回复
不是

就是有个背景图片

上面有个移动的图片,怎么能让背景图片正常的显示呢
chenweionline 2005-08-17
  • 打赏
  • 举报
回复
加载和显示图像的方法,看我的blog吧

http://www.blogjava.net/leon/archive/2005/07/12/7532.aspx
danseshi 2005-08-17
  • 打赏
  • 举报
回复
能不能说的详细点
主要时getImage()问题,我怎么不能正确得到图片呢
总说getDocumentBase()有问题

Clock.java:26: cannot resolve symbol
symbol : method getDocumentBase ()
location: class Clock
clockSkin=getImage(getDocumentBase(),"skin.gif");
chenweionline 2005-08-17
  • 打赏
  • 举报
回复
重载JPanel的
public void paint(Graphics){
super.paint(g);

g.drawImage(image, 0, 0, this);
}

你使用getImage()加载图片的话,要保证画之前图片被完全加载。
congliu 2005-08-17
  • 打赏
  • 举报
回复
Image im;
im = Toolkit.getDefaultToolkit().getImage("YourPic.jpg");

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧