我现在在做一个AWT画图程序,我在画了前一个面板后,想关闭
这一个面板,再重启一个面板,请问如何关闭前一个面板?

解决方案 »

  1.   

    前一个面板生成后一个面板后自己调用dispose()方法
      

  2.   

    我的程序是这样的SketchPanel.java
    public class SketchPanel extends JPanel implements WindowConstants{
    Point2D last;
    ArrayList lines;
    Point2D end ;
    public SketchPanel() {
    //设置开始点的坐标
    last = new Point2D.Double(100,100);
    lines = new ArrayList();
    KeyHandler listener = new KeyHandler();
    addKeyListener(listener); //添加按键监听
    setFocusable(true);       //获取焦点
    }
    //添加坐标
    public void add(int x, int y) {
    //定义空间位置,设置终点坐标
    end = new Point2D.Double(last.getX() + x, last.getY() + y);
    //空间内的线段连接
    Line2D line = new Line2D.Double(last,end);
    lines.add(line);
    repaint(); //重写
    last = end;
    }
    // 清空
    public void clear() {
    SketchFrame sp = new SketchFrame();
    sp.dispose();
    sp.show();
    }
    //画图方法
    public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D)g;
    for (int i=0; i<lines.size(); i++) 
    g2.draw((Line2D)lines.get(i));
    }
    //清空画板
    public void clearComponent() {
    super.paintComponent(this.getGraphics());
    }
    private static final int INCRENMENT = 10;

    private class KeyHandler implements KeyListener {
    //单击键事件
    public void keyTyped(KeyEvent event) {
    char keychar = event.getKeyChar();
    int d;
    // 
    if (Character.isUpperCase(keychar)) {
    d = INCRENMENT;
    keychar = Character.toLowerCase(keychar);   //转换成小写
    } else {
    d = INCRENMENT;
    }
    if (keychar == 'h') add(-d,0);  //对h键添加事件
    else if (keychar == 'l') add(d,0);
    else if (keychar == 'k') add(0,-d);
    else if (keychar == 'j') add(-d,0);
    else if (keychar == 'a') clear();
    }
    //按键事件
    public void keyPressed(KeyEvent event) {
    //得到键值
    int keycode = event.getKeyCode();
    int d;
    d = INCRENMENT;
    if (keycode == event.VK_LEFT)
    add(-d,0); //对小键盘左方向键增加具体事件响应
    else if (keycode == event.VK_RIGHT) 
    add(d,0);
    else if (keycode == event.VK_UP)
    add(0,-d);
    else if (keycode == event.VK_DOWN)
    add(0,d);
    else if (keycode == event.VK_B)
    clear();
    }
    //弹开事件
    public void keyReleased(KeyEvent event) {}

    }
    }
    SketchFrame.java
    public class SketchFrame extends JFrame {
    public SketchFrame() {
    setTitle("键盘事件");
    setSize(300,200);
    SketchPanel panel = new SketchPanel();
    Container c = getContentPane();
    c.add(panel);
    }
    }
    Sketch.java
    public class Sketch { public static void main(String[] args) {
    SketchFrame sf = new SketchFrame();
    //sf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    sf.show();
    }
    }
    我想通过SketchPanel里的clear方法关闭上一个窗口,另外再重启一个新窗口
      

  3.   

    你可以在构造SketchPanel的时候把frame传给他,然后调用其dispose方法。
      

  4.   

    由于我打开的2个窗口是同一个对象,各位帮我看看sketchPanel
    里该怎么改?
      

  5.   


    import javax.swing.*;import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.geom.*;
    import java.util.ArrayList;public class SketchPanel extends JPanel implements WindowConstants{
        Point2D last;
        ArrayList lines;
        Point2D end ;
        JFrame parent;
        public SketchPanel(JFrame parent) {
         this.parent=parent;
            //设置开始点的坐标
            last = new Point2D.Double(100,100);
            lines = new ArrayList();
            KeyHandler listener = new KeyHandler();
            addKeyListener((KeyListener) listener); //添加按键监听
            setFocusable(true);       //获取焦点
        }
        //添加坐标
        public void add(int x, int y) {
            //定义空间位置,设置终点坐标
            end = new Point2D.Double(last.getX() + x, last.getY() + y);
            //空间内的线段连接
            Line2D line = new Line2D.Double(last,end);
            lines.add(line);
            repaint(); //重写
            last = end;
        }
        // 清空
        public void clear() {
         System.out.println("hello");
            SketchFrame sp = new SketchFrame();
            parent.dispose();
            sp.setVisible(true);

        }
        //画图方法
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D)g;
            for (int i=0; i<lines.size(); i++) 
                g2.draw((Line2D)lines.get(i));
        }
        //清空画板
        public void clearComponent() {
            super.paintComponent(this.getGraphics());        
        }
        private static final int INCRENMENT = 10;
        
        private class KeyHandler implements KeyListener {
            //单击键事件
            public void keyTyped(KeyEvent event) {
                char keychar = event.getKeyChar();
                int d;
                // 
                if (Character.isUpperCase(keychar)) {
                    d = INCRENMENT;
                    keychar = Character.toLowerCase(keychar);   //转换成小写                
                } else {
                    d = INCRENMENT;
                }
                if (keychar == 'h') add(-d,0);  //对h键添加事件
                else if (keychar == 'l') add(d,0);
                else if (keychar == 'k') add(0,-d);
                else if (keychar == 'j') add(-d,0);
                else if (keychar == 'a') clear();
            }
            //按键事件
            public void keyPressed(KeyEvent event) {
                //得到键值
                int keycode = event.getKeyCode();
                int d;
                d = INCRENMENT;
                if (keycode == event.VK_LEFT)
                    add(-d,0); //对小键盘左方向键增加具体事件响应
                else if (keycode == event.VK_RIGHT) 
                    add(d,0);
                else if (keycode == event.VK_UP)
                    add(0,-d);
                else if (keycode == event.VK_DOWN)
                    add(0,d);
                else if (keycode == event.VK_B)
                    clear();
            }
            //弹开事件
            public void keyReleased(KeyEvent event) {}
            
        }
    }
    SketchFrame.java
    public class SketchFrame extends JFrame {
        public SketchFrame() {
            setTitle("键盘事件");
            setSize(300,200);
            SketchPanel panel = new SketchPanel(this);
            Container c = getContentPane();
            c.add(panel);
        }
    }
      

  6.   

    import javax.swing.*;import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.geom.*;
    import java.util.ArrayList;public class SketchPanel extends JPanel implements WindowConstants{
        Point2D last;
        ArrayList lines;
        Point2D end ;
        JFrame parent;
        public SketchPanel(JFrame parent) {
            this.parent=parent;
            //设置开始点的坐标
            last = new Point2D.Double(100,100);
            lines = new ArrayList();
            KeyHandler listener = new KeyHandler();
            addKeyListener((KeyListener) listener); //添加按键监听
            setFocusable(true);       //获取焦点
        }
        //添加坐标
        public void add(int x, int y) {
            //定义空间位置,设置终点坐标
            end = new Point2D.Double(last.getX() + x, last.getY() + y);
            //空间内的线段连接
            Line2D line = new Line2D.Double(last,end);
            lines.add(line);
            repaint(); //重写
            last = end;
        }
        // 清空
        public void clear() {
            System.out.println("hello");
            SketchFrame sp = new SketchFrame();
            parent.dispose();
            sp.setVisible(true);

        }
        //画图方法
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D)g;
            for (int i=0; i<lines.size(); i++) 
                g2.draw((Line2D)lines.get(i));
        }
        //清空画板
        public void clearComponent() {
            super.paintComponent(this.getGraphics());        
        }
        private static final int INCRENMENT = 10;
        
        private class KeyHandler implements KeyListener {
            //单击键事件
            public void keyTyped(KeyEvent event) {
                char keychar = event.getKeyChar();
                int d;
                // 
                if (Character.isUpperCase(keychar)) {
                    d = INCRENMENT;
                    keychar = Character.toLowerCase(keychar);   //转换成小写                
                } else {
                    d = INCRENMENT;
                }
                if (keychar == 'h') add(-d,0);  //对h键添加事件
                else if (keychar == 'l') add(d,0);
                else if (keychar == 'k') add(0,-d);
                else if (keychar == 'j') add(-d,0);
                else if (keychar == 'a') clear();
            }
            //按键事件
            public void keyPressed(KeyEvent event) {
                //得到键值
                int keycode = event.getKeyCode();
                int d;
                d = INCRENMENT;
                if (keycode == event.VK_LEFT)
                    add(-d,0); //对小键盘左方向键增加具体事件响应
                else if (keycode == event.VK_RIGHT) 
                    add(d,0);
                else if (keycode == event.VK_UP)
                    add(0,-d);
                else if (keycode == event.VK_DOWN)
                    add(0,d);
                else if (keycode == event.VK_B)
                    clear();
            }
            //弹开事件
            public void keyReleased(KeyEvent event) {}
            
        }
    }
      

  7.   

    SketchFrame.java
    public class SketchFrame extends JFrame {
        public SketchFrame() {
            setTitle("键盘事件");
            setSize(300,200);
            SketchPanel panel = new SketchPanel(this);
            Container c = getContentPane();
            c.add(panel);
        }
    }
      

  8.   

    谢谢LS的朋友,已经解决了,给分,
    我的java基础比较差,最近在补基础