首页 > 其他分享 >GUI-3

GUI-3

时间:2024-09-03 09:23:03浏览次数:5  
标签:java 鼠标 GUI void import new public

事件监听

鼠标监听事件 模拟画图工具

目的

实现鼠标画画(只实现简单的点击)

实现效果

在这里插入图片描述

代码

package com.bao.lesson6;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;

//鼠标监听事件
public class TestMouseListener {
    public static void main(String[] args) {
        new MyFrame("画图");

    }
}
//自己的类
class MyFrame extends Frame {
    //画画需要画笔,需要监听鼠标当前的位置,需要集合来存储这个点
    //属性
    ArrayList points;

    public MyFrame(String title)  {
        super(title);
        setBounds(200,200,800,500);

        //存鼠标点击的点
        points = new ArrayList<>();

        setVisible(true);
        //添加鼠标监听器,针对这个窗口
        this.addMouseListener(new MyMouseListener());
    }

    @Override
    public void paint(Graphics g) {
        //画画,监听鼠标的事件
        Iterator iterator = points.iterator();
        while(iterator.hasNext()){
          Point point = (Point)iterator.next();
          g.setColor(Color.BLUE);
          g.fillOval(point.x,point.y,10,10);
        }
    }
    //添加一个点到我们的界面上去


//适配器模式
    private class MyMouseListener extends MouseAdapter {
        //鼠标 按下,弹起,按住不放


    @Override
    public void mousePressed(MouseEvent e) {
        //谁调用,获取的资源对象就是谁
        MyFrame myFrame = (MyFrame) e.getSource();
        //这里我们点击的时候,就会在界面上产生一个点!
        //这个点就是鼠标的点
       points.add(new Point(e.getX(),e.getY()));

        //每次点击鼠标都需要重新画一遍
        myFrame.repaint(); //刷新 30帧 60帧
    }
}
}


[!IMPORTANT]

这个鼠标点击实现画画的总结

  • 首先,面板中要有画笔,有收集鼠标点击的点的集合,监听鼠标点击事件的监听器
  • 通过监听器来获取鼠标点击的点的坐标,传给集合
  • 集合通过迭代器来实现每个点的遍历
  • 在点的遍历的过程中,在这个点用画笔画一个小的实心圆,也就是我们看到的点
  • 我们最后需要使面板在鼠标每点击一次重新绘画,以实现绘画方法的多次实现

当我们new一个面板时,系统会自动调用画笔的方法,导致无法获取到鼠标点的信息,画笔就结束了,所以需要再写一个repaint()方法使得绘画方法再次调用

窗口监听

package com.bao.lesson7;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestWindowListener {
    public static void main(String[] args) {
        new MyWindowFrame("未激活");
    }
}
class MyWindowFrame extends Frame {
    public MyWindowFrame(String title) {
        super(title);
        setVisible(true);
        setBackground(Color.BLACK);
        setBounds(100, 100, 500, 500);


        //使用了匿名内部类
        this.addWindowListener(new WindowAdapter() {
            //关闭窗口
            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("closing");
                setVisible(false);
                System.exit(0);
            }
            //激活窗口
            @Override
            public void windowActivated(WindowEvent e) {
                MyWindowFrame source = (MyWindowFrame) e.getSource();
                source.setTitle("被激活了");
            }

            //其他的窗口监听事件不常用
        });
    }
}

隐藏窗口后显示窗口,窗口标题变为”被激活了“

在这里插入图片描述

关闭窗口后控制台输出”closing“

在这里插入图片描述

键盘监听

实现效果

按下哪个键就在控制台输出对应键编码,若按下上键,则输出”你按下了上键“

package com.bao.lesson8;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class TestKeyListener {
    public static void main(String[] args) {
        new MyKeyFrame();
    }
}
class MyKeyFrame extends Frame {
    public MyKeyFrame() {
        setVisible(true);
        setBackground(Color.BLUE);
        setBounds(100,100,500,500);

        this.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                int keyCode = e.getKeyCode();
                System.out.println(keyCode);
                if(keyCode == KeyEvent.VK_UP){
                    System.out.println("你按下了上键");
                }

            }
        });
    }
}

在这里插入图片描述

Swing

JFrame 窗体

继承于Frame,更加高级,关闭窗口事件封装为了一个方法

package com.bao.lesson9;

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

public class JFrameDemo {
    public void init(){
        //顶级窗口
        JFrame jFrame = new JFrame("go");
        jFrame.setVisible(true);
        jFrame.setBounds(100,100,200,200);

        //设置文字
        JLabel label = new JLabel("欢迎来到英雄联盟");
        jFrame.add(label);

        //容器实例化 获得一个容器,它才是它真正的颜色
        Container contentPane = jFrame.getContentPane();
        contentPane.setBackground(Color.BLUE);



        //关闭事件
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new JFrameDemo().init();
    }
}

要实现容器实例化才可以增加组件以及设置背景色

Dialog 弹窗

package com.bao.lesson9;

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

public class TestDialog extends JFrame {
    public TestDialog() {
        this.setVisible(true);
        this.setSize(700, 500);

        //JFrame放东西
        Container contentPane = this.getContentPane();
        //绝对定位,通过x,y
        contentPane.setLayout(null);

        //按钮
        Button button = new Button("点击弹出对话框");
        button.setBounds(30,30,200,50);

        //点击这个按钮的时候,弹出一个弹窗
        contentPane.add(button);
        //监听事件
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //弹窗
            new MyDialog();
            }
        });



        //关闭事件
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public void init(){

    }

    public static void main(String[] args) {
            new TestDialog();
    }
}



//弹窗窗口
class MyDialog extends JDialog {
    public MyDialog() {
        this.setVisible(true);
        this.setBounds(100,100,500,500);
//        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
         //弹窗中默认已经有关闭事件了,所以不用额外添加
        Container contentPane = this.getContentPane();
        contentPane.setLayout(null);
        JLabel jLabel = new JLabel("hello");
        jLabel.setBounds(100,100,50,50);
        contentPane.add(jLabel);
    }
}

实现效果

在这里插入图片描述

标签:java,鼠标,GUI,void,import,new,public
From: https://blog.csdn.net/wozhaonue_w/article/details/141749034

相关文章

  • (多模态)MedM2G: Unifying Medical Multi-Modal Generation via CrossGuided Diffusion
    1.摘要医学生成模型以其高质量的样本生成能力而闻名,加速了医学应用的快速增长。然而,目前的研究主要集中在针对不同医疗任务的单独医学生成模型上,受限于医学多模态知识的不足,制约了医学的综合诊断。在本文中,我们提出MedM2G,即医学多模态生成框架,其关键创新是在统一模型内对齐......
  • 几分钟带你入门python GUI框架tkinter
    一、Tkinter是什么?Tkinter是Python的标准GUI库。Python与Tkinter结合使用时,提供了一种快速简便的方法来创建GUI应用程序。Tkinter为TkGUI工具包提供了一个强大的面向对象的接口。二、使用Tkinter创建GUI应用程序的基本步骤:1.安装python首先,确保你已经安......
  • GUI-4及总结
    Swing标签Icon标签将绘制的图形赋给JLabelpackagecom.bao.lesson10;importjavax.swing.*;importjava.awt.*;publicclassMyIconextendsJFrameimplementsIcon{//属性privateintwidth;privateintheight;publicMyIcon(){};//无参......
  • C++创建GUI按钮\文本框(Windows)不用QT!!!
    一定要的:#include<windows.h>剩下的: 过程:LRESULTCALLBACKWndProc(HWNDhwnd,UINTMessage,WPARAMwParam,LPARAMlParam){switch(Message){ caseWM_CREATE:{ /*略*///HWND名称=CreateWindow(类型,显示的字,WS_CHILD|WS_VISIBLE,x,y,宽,......
  • iOS审核被拒Guideline 4.2 - Design - Minimum Functionality 被认为马甲包
    解决方案:UI风格修改,APP名字,代码混淆Hello,Thankyouforyourresubmission.Uponfurtherreview,weidentifiedanadditionalissuethatneedsyourattention.Seebelowformoreinformation.Ifyouhaveanyquestions,weareheretohelp.Replytothismessa......
  • pyautogui的一些自动化示例,附代码
    以下为您提供一些pyautogui的自动化示例及代码:模拟鼠标点击和移动:importpyautogui#获取屏幕的宽度和高度screen_width,screen_height=pyautogui.size()#将鼠标移动到屏幕中心pyautogui.moveTo(screen_width/2,screen_height/2)#在屏幕中心点击鼠标左键......
  • GUI编程02:Panel面板讲解
    本节内容视频链接:4、Panel面板讲解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p=4&vd_source=b5775c3a4ea16a5306db9c7c1c1486b5在窗口(frame)中添加面板(panel), 并解决了窗口关闭事件。packagecom.yundait.www;importjava.awt.*;importjava.awt.e......
  • 超棒!适合毕业论文!很全面!基于蚁群算法的路径规划研究(包含GUI)(Matlab代码实现)
      ......
  • 滚雪球学Java(91):Java GUI编程实战:精通组件开发技巧,真有点东西!
      咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及JavaSE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~......
  • 除Qt以外的C++GUI库
    ImGui图形用户界面项目Github地址:https://github.com/ocornut/imguiwxWidgetsHome:https://wxwidgets.org/。NanoGUINanoGUI是用于OpenGL3+、GLES2/3和Metal的极简跨平台工具库。RmlUiRmlUi是基于HTML和CSS标准的C++GUI库,目标是为任何项目的界面需求提供完整的解决......