简体   繁体   English

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

[英]Regarding adding of Rectangle when mouse is clicked on JFrame

I am a beginner. 我是初学者。 I am trying to add filled rectangle or any other graphic on JFrame using multiple inner classes. 我正在尝试使用多个内部类在JFrame上添加填充的矩形或任何其他图形。 I am getting debugging errors. 我收到调试错误。 What are the problems here?. 这里有什么问题? If this is a wrong way. 如果这是错误的方法。 Please tell me how to do the same using JFrame and JPanel only. 请告诉我如何仅使用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

        }

}

}

The code posted has multiple problems. 发布的代码有多个问题。 See this working example with explanations in comments. 请参见此工作示例,并在注释中进行解释。

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.
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM