初冀 2023-03-22 23:10 采纳率: 61%
浏览 51
已结题

java鼠标点击事件实现画圆画方


/* 7.编写Java程序,创建一个窗体,并实现交互。
 *在窗体内“单击鼠标左键”,在光标处绘制一个“红色圆”;
 *窗体内“单击鼠标右键”,在光标处绘制一个“绿色方框”;
 *窗体内“双击鼠标左键”,清空所有已画“圆”和“方”。
 */
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.*;
import java.awt.event.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;


public class CircleSquare extends JFrame {
     myPanel mp=new myPanel();
     CircleSquare (){
         this.setBounds(100,100,200,200);
         this.setTitle("左键画圆,右键画方");
         this.add(mp);
      
         this.getContentPane().addMouseListener(new draw());
     }
    public static void main(String[] args) {
           CircleSquare frm=new  CircleSquare ();
           frm.setVisible(true);
     }
     class myPanel extends JPanel{
         int a=0;//判断鼠标点击状态
         int x,y;//判断位置
         public void paint(Graphics g){
          if(a==1){
               g.setColor(Color.RED);//点击左键,画红色圆
               g.fillOval(x,y,10,10);
          }
             else if(a==2){//双击清除
                 g.setColor(Color.WHITE);
                 super.paint(g);
             }
             else if(a==3){//单机右键,画方框
             g.setColor(Color.GREEN);
             g.drawRect(x,y,10,10);
              }
          }
     }
     class draw extends MouseAdapter{
         public void mouseClicked(MouseEvent e){
             final myPanel mp=(myPanel)e.getSource();
             mp.x=e.getX();
             mp.y=e.getY();
             if(e.getButton()==e.BUTTON1){//单击左键
             mp.a=1;
                 if(e.getClickCount() == 2){//双击
                 mp.a=2;
                 }
             mp.repaint();
             }
             else if(e.getButton()==e.BUTTON3){//单击右键
                 mp.a=3;
             mp.repaint();
             }
      }
}
}

这个运行出来只是一个窗体,鼠标点击毫无反应,想知道哪里出问题了,我是四处搜集资料写的这个程序, 什么都不懂,感觉是不是监听器没有发挥作用啊

img

  • 写回答

3条回答 默认 最新

  • 关注
     class draw extends MouseAdapter{
            public void mouseClicked(MouseEvent e){
                //你这个地方错了,这个地方这句注释掉就好了
                //final myPanel mp=(myPanel)(e.getSource());
                mp.x=e.getX();
                mp.y=e.getY();
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月31日
  • 已采纳回答 3月23日
  • 修改了问题 3月22日
  • 创建了问题 3月22日

悬赏问题

  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持