import java.io.*;
import java.beans.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class bean2 extends JFrame implements Serializable {
JPanel contentPanel=(JPanel)this.getContentPane();
JPanel jpanel=new JPanel(new GridLayout(10,1,5,5));
canvas can=new canvas();
canvas1 canvas1_1=new canvas1(Color.red,can);
canvas1 canvas1_2=new canvas1(Color.blue,can);
canvas1 canvas1_3=new canvas1(Color.cyan,can);
canvas1 canvas1_4=new canvas1(Color.magenta,can);
canvas1 canvas1_5=new canvas1(Color.black,can);
text text1=new text();
public bean2() {
super("myFrame");
this.setSize(400,300);
this.setResizable(false);
this.setLocation((int)this.getToolkit().getScreenSize().getWidth()/2-200,(int)this.getToolkit().getScreenSize().getHeight()/2-150);
contentPanel.setLayout(new BorderLayout());
contentPanel.add("Center",can);
contentPanel.add("South",text1);
jpanel.setBackground(Color.white);
jpanel.setSize(40,300);
jpanel.add(canvas1_1);
jpanel.add(canvas1_2);
jpanel.add(canvas1_3);
jpanel.add(canvas1_4);
jpanel.add(canvas1_5);
contentPanel.add("East",jpanel);
can.addPropertyChangeListener(text1);
this.setVisible(true);
}public void processWindowEvent(WindowEvent e) {
if(e.getID()==WindowEvent.WINDOW_CLOSING) {
  this.setVisible(false);
  this.dispose();
  System.exit(0);
}
}static void main(String args[]) {
new bean2();
}
}class canvas extends Canvas {
int xx,yy=-1;
protected String xy="0,0";
public Graphics g=null;
protected PropertyChangeSupport changes=new PropertyChangeSupport(this);
public canvas() {
this.enableEvents(AWTEvent.MOUSE_EVENT_MASK|AWTEvent.MOUSE_MOTION_EVENT_MASK);
this.setSize(300,300);
this.setBackground(Color.white);
}public void addPropertyChangeListener(PropertyChangeListener l) {
  changes.addPropertyChangeListener(l);
}public void removePropertyChangeListener(PropertyChangeListener l) {
  changes.removePropertyChangeListener(l);
}public Graphics getGraphics() {
  return this.g;
}protected void setXY(String newXY) {
String oldXY=xy;
xy=newXY;
changes.firePropertyChange("xy",oldXY,newXY);
}public void setColor(Color c) {
  if(g==null)
    g=this.getGraphics();
  g.setColor(c);
}protected void processMouseMotionEvent(MouseEvent e) {
if(g==null)
  g=this.getGraphics();
if(e.getID()==MouseEvent.MOUSE_DRAGGED) {
  if(xx>0&&yy>0) {
    g.drawLine(xx,yy,e.getX(),e.getY());
  }
  xx=e.getX();
  yy=e.getY();
  setXY(new Integer(xx).toString()+","+new Integer(yy).toString());
}
if(e.getID()==MouseEvent.MOUSE_MOVED) {
  xx=e.getX();
  yy=e.getY();
  setXY(new Integer(xx).toString()+","+new Integer(yy).toString());
}
super.processMouseMotionEvent(e);
}protected void processMouseEvent(MouseEvent e) {
if(g==null)
  g=this.getGraphics();
if(e.getID()==MouseEvent.MOUSE_CLICKED) {
  g.drawLine(e.getX(),e.getY(),e.getX(),e.getY());
  if(e.getClickCount()==2)
    g.clearRect(0,0,this.getWidth(),this.getHeight());
super.processMouseEvent(e);
}
}
}class text extends JTextField implements Serializable,PropertyChangeListener {
public text() {
super("");
}public void propertyChange(PropertyChangeEvent e) {
  this.setText((String)e.getNewValue());
}
}class canvas1 extends Canvas {
canvas can=null;
Color c=null;
public canvas1(Color c,canvas cans) {
this.can=cans;
this.c=c;
this.setSize(30,15);
this.setBackground(c);
this.enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}public void processMouseEvent(MouseEvent e) {
  if(e.getID()==MouseEvent.MOUSE_CLICKED)
    can.setColor(c);
}
}

解决方案 »

  1.   

    beyond_xiruo(希偌):
     请问楼上的这些代码和我的问题有什么关系?
     我看了,可没想出什么. 现在我的问题是:
     awt和applet的绘制图片的方式是各不相同的(Toolkit和getImage),而现在awt是从applet里弹出来的,如果要在awt组件里绘制图片,那这图片到底属于谁?当然,可以作实验,可我都试了,结果图片没人要了,都不管.
    如,单独的一个frame,自己执行时,图片马上就出来了(Toolkit),从applet里弹出来就没的显示了,改用applet的绘图片方式也不行.need help!
      

  2.   

    将代码发送给我,我给你看一看,这样说可能还是很难讲清楚,总之,Frame有自己paint和repaint,可以说一旦弹出窗口以后就与Applet没有关系了。
      

  3.   

    AppletContext context = applet.getAppletContext();
    Image img = context.getImage(url);then... 
    paint();
      

  4.   

    在applet里显示图片的话,你必须先装载图片然后显示,如下:
    import java.awt.MediaTracker; 
    MediaTracker t = new MediaTracker(); 
    t.addImage(img,0); 
    t.waitForAll();
    g.drawImage(img,0,0,null);