关于在JFrame上单击鼠标时添加Rectangle

时间:2017-03-09 16:26:36

标签: java swing graphics mouse frame

我是初学者。我正在尝试使用多个内部类在JFrame上添加填充矩形或任何其他图形。我收到调试错误。这有什么问题?如果这是一种错误的方式。请告诉我如何使用JFrame和JPanel进行相同的操作。

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

public class RainBow{

    JFrame frame;

    public static void main(String[] args){
        RainBow bow = new RainBow();
        bow.go();
    }

    public class Paint extends JPanel{
        public void paintComponent(Graphics g){
            g.setColor(Color.red);
            g.fillRect(100, 100, 100, 100);

        }
    }

    public void go(){
        frame.addMouseListener(new ListenMouse());
        frame.setSize(400, 400);
        frame.setVisible(true);
    }

    public class ListenMouse implements MouseListener{
        public void mosueClicked(MouseEvent a){
            Paint p = new Paint();
            frame.getContentPane().add(p);
            frame.setVisible(true);
        }

        @Override
        public void mouseClicked(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseEntered(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseExited(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mousePressed(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseReleased(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }

}

}

1 个答案:

答案 0 :(得分:1)

发布的代码存在多个问题。请参阅此工作示例,并在评论中进行说明。

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

public class RainBow {

    JFrame frame;
    boolean paintRectangle = false;

    public static void main(String[] args) {
        RainBow bow = new RainBow();
        bow.go();
    }

    public class Paint extends JPanel {

        public void paintComponent(Graphics g) {
            super.paintComponent(g); // should always be done
            if (paintRectangle) {
                g.setColor(Color.red);
                g.fillRect(100, 100, 100, 100);
            }
        }
    }

    public void go() {
        frame = new JFrame(); // otherwise NPE
        Paint paint = new Paint();
        paint.addMouseListener(new ListenMouse()); // add listner to paint
        frame.add(paint); // add paint at start-up
        frame.setSize(400, 400);
        frame.setVisible(true);
        // ensures JVM shuts down when frame is closed.
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

    public class ListenMouse extends MouseAdapter {

        // this method is incorrectly spelled!
        public void mosueClicked(MouseEvent a) {
        }

        @Override
        public void mouseClicked(MouseEvent arg0) {
            /* requires special handling to add components on the fly */
            //Paint p = new Paint(); 
            paintRectangle = true;
            frame.repaint(); // forces the Paint to be painted as well.
        }
    }
}