我在JFrame中加载了一个图片 
  我想在这个图片上作画  要怎么做  才能使得这两张图互不干扰  
 作画的部分调用 clearRect()的时候  不会使JFrame上加载的图片也被清除

解决方案 »

  1.   

    以前写的供参考import javax.swing.*;
    import java.awt.*;
    import java.awt.image.*;public class MyFrame extends JFrame {    private static final Image image = Toolkit.getDefaultToolkit().getImage("C:\\车牌.jpg");
        JPanel p, p1;
        Graphics gp1;    public MyFrame() {
            this.setSize(800, 600);
            p = new MyPanel(image);
            p1 = new MyPanel();
            p1.setBounds(0, 0, 800, 600);
            p.setBounds(0, 0, 800, 600);
            p1.setOpaque(false);
            p1.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {            public void mouseMoved(java.awt.event.MouseEvent evt) {
                    p1MouseMoved(evt);
                }
            });
            add(p);
            add(p1);
            this.setLocationRelativeTo(null);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }    private void p1MouseMoved(java.awt.event.MouseEvent evt) {
            gp1 = p1.getGraphics();
            p1.paintImmediately(0, 0, 800, 600);
            gp1.setColor(new Color(1f, 0f, 0f, 1f));
            gp1.drawRect(evt.getX(), evt.getY(), 100, 100);
        }    public static void main(String[] args) {
            MyFrame frame = new MyFrame();
        }
    }class MyPanel extends JPanel {    private Image image = null;    public MyPanel(Image image) {
            super();
            this.image = image;
        }    public MyPanel() {
            super();
        }    protected void paintComponent(Graphics g) {
            g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), this);
        }

      

  2.   

    private void p1MouseClicked(java.awt.event.MouseEvent evt) {
         gp1 = p1.getGraphics();
            //p1.paintImmediately(0, 0, 800, 600);
            gp1.setColor(Color.BLACK);
            gp1.fillOval(evt.getX()-15, evt.getY()-15, 30, 30);
            gp1.clearRect(0, 0, 30, 30);
        }
    你好   对你的程序我修改了一下  加了  gp1.clearRect(0, 0, 30, 30);  这行代码
     我单击的时候是出现了一个黑圆   可是  同时  gp1.clearRect(0, 0, 30, 30);  这段代码
     使得那个位置上变为空白   我是希望调用gp1.clearRect(0, 0, 30, 30); 时  改变的是p1 中的画面
     而不是  连同p的背景也被改变   希望你们能帮我解答一下   谢谢了