繁体   English   中英

Java中Graphics2D中的鼠标单击事件

[英]mouse clicked event in Graphics2D in java

你好,在此先谢谢大家,我需要通过在Graphics2D的绘图面板上单击鼠标来找到X和y坐标值,并且我需要获取坐标的字符串值以随机更改坐标的颜色。

package com.zetcode;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

class DrawPanel extends JPanel {

    private void doDrawing(Graphics g) {

        Graphics2D g2d = (Graphics2D) g;

        g2d.setColor(new Color(212, 212, 212));
        g2d.drawRect(10, 15, 90, 60);
        g2d.drawRect(130, 15, 90, 60);
        g2d.drawRect(250, 15, 90, 60);
        g2d.drawRect(10, 105, 90, 60);
        g2d.drawRect(130, 105, 90, 60);
        g2d.drawRect(250, 105, 90, 60);
        g2d.drawRect(10, 195, 90, 60);
        g2d.drawRect(130, 195, 90, 60);
        g2d.drawRect(250, 195, 90, 60);

        g2d.setColor(new Color(125, 167, 116));
        g2d.fillRect(10, 15, 90, 60);

        g2d.setColor(new Color(42, 179, 231));
        g2d.fillRect(130, 15, 90, 60);

        g2d.setColor(new Color(70, 67, 123));
        g2d.fillRect(250, 15, 90, 60);

        g2d.setColor(new Color(130, 100, 84));
        g2d.fillRect(10, 105, 90, 60);

        g2d.setColor(new Color(252, 211, 61));
        g2d.fillRect(130, 105, 90, 60);

        g2d.setColor(new Color(241, 98, 69));
        g2d.fillRect(250, 105, 90, 60);

        g2d.setColor(new Color(217, 146, 54));
        g2d.fillRect(10, 195, 90, 60);

        g2d.setColor(new Color(63, 121, 186));
        g2d.fillRect(130, 195, 90, 60);

        g2d.setColor(new Color(31, 21, 1));
        g2d.fillRect(250, 195, 90, 60);




          }


         public void mouseClicked(MouseEvent me) {
         int  x1 = me.getX();
         int  y1 = me.getY();
         System.out.println(x1);
          JOptionPane.showMessageDialog(this, x1);
                    JOptionPane.showMessageDialog(this, y1);
          //System.out.println(y1);
          }
          @Override
          public void paintComponent(Graphics g) {

        super.paintComponent(g);
        doDrawing(g);

         }
           }

     public class RectanglesExample extends JFrame {



    public RectanglesExample() {
        initUI();
    }

    public final void initUI() {

        DrawPanel dpnl = new DrawPanel();
        add(dpnl);

        setSize(360, 300);
        setTitle("Rectangles");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                RectanglesExample ex = new RectanglesExample();
                ex.setVisible(true);
            }
        });
    }
}

关于坐标的打印:声明一个内部类,如下所示

    public class MyMouseListener extends MouseAdapter{


        @Override
        public void mouseClicked(MouseEvent e) {
             int  x1 = e.getX();
             int  y1 = e.getY();
             System.out.println(x1);
             System.out.println(y1);
             repaint();

        }
    }

并添加一个构造器,该构造器注册MyMouseListener

   public DrawPanel(){
    this.addMouseListener(new MyMouseListener());
}

每次您在面板上单击时,都会打印出坐标。

暂无
暂无

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

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