用getImage(getDoucmentBase(),xxx.gif);和drawImage(),怎么不能在JPanel中画啊?如何在组件中显示图片(不用JButton(Icon)和JLabel(Icon)显示图标的形式),比如在JPanel中,而不是通过继承JApplet在浏览器中显示。怎么才能实现呢?在应用程序里(不在浏览器中显示),有背景图片和活动图片,活动图片运动时,怎么才能正确显示背景图片呢?
谢谢!

解决方案 »

  1.   

    重载JPanel的
    public void paint(Graphics){
      super.paint(g);  g.drawImage(image, 0, 0, this);
    }你使用getImage()加载图片的话,要保证画之前图片被完全加载。
      

  2.   

    能不能说的详细点
    主要时getImage()问题,我怎么不能正确得到图片呢
    总说getDocumentBase()有问题Clock.java:26: cannot resolve symbol
    symbol  : method getDocumentBase ()
    location: class Clock
      clockSkin=getImage(getDocumentBase(),"skin.gif");
      

  3.   

    加载和显示图像的方法,看我的blog吧http://www.blogjava.net/leon/archive/2005/07/12/7532.aspx
      

  4.   

    Image im;
    im = Toolkit.getDefaultToolkit().getImage("YourPic.jpg");
      

  5.   

    谢谢上边的在《Java 2 图形设计卷Ⅰ:AWT》找到答案了在应用程序里获取图像的引用,应用程序从Toolkit类中调用getImage()方法,而不是调用Applet.getImage()方法。而我就犯了这个错误,没有好好看书,惭愧啊!
    “磨刀不误砍柴工”真是没错啊!不过第二个问题还请高人指点!
      

  6.   

    活动图片指的是gif吗?可以试试重载JPanel的paint()方法画出背景图片,然后构造一个包含活动图片的ImageIcon将其添加进JLabel,在将JLabel加入JPanel。可能还需要JLabel.setOpaque(false);
      

  7.   

    试试在移动图片的时候调用JPanel的repaint()方法,重绘背景图。
      

  8.   

    不懂线程,帮忙看一下,怎么不能循环??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(); 
        }  }}