ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java实现框选框

2022-01-28 17:03:12  阅读:166  来源: 互联网

标签:java 实现 void DragFrame2 int paintPanel Override 框选 public


主要通过调用api接口来实现.

主要使用了

MouseMotionAdapter的public void mouseDragged(MouseEvent e)

和MouseListener的按压和释放方法

本来是直接在JPanel的paint方法绘制,效果还可以,但是当JPanel中含有组件时,屏幕渲染太慢,会显得很闪烁.

最终,发现在里面使用一个JPanel充当框选框是效果最好的

package com.boost;


import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;

public class DragFrame2 extends JFrame {
    public JPanel paintPanel;
    private Point p;
    public Point p2;
    JPanel jback = new JPanel();
    public DragFrame2(){
        super("drag build2");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocation(new Point(500,200));
        setSize(800+16,600+39);
        setPreferredSize(new Dimension(800,600));
        setLayout(null);
        jback.setBackground(new Color(0xab,0xcd,0xef,0x55));
        jback.setBounds(0,0,0,0);
        jback.setBorder(new LineBorder(Color.BLACK));
        paintPanel = new JPanel(null);
        paintPanel.add(jback);
        paintPanel.setSize(800,600);
        paintPanel.setPreferredSize(new Dimension(800,600));
        JButton j1 = new JButton("hello world");
        j1.setBounds(100,40,100,40);
        paintPanel.add(j1);
        add(paintPanel);
        addListeners();
    }
    public void addListeners(){
        paintPanel.addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                super.mouseDragged(e);
                p2 = e.getPoint();
                if(p != null){
                    int x1 = (int) p.getX();
                    int y1 = (int) p.getY();
                    int x2 = (int) p2.getX();
                    int y2 = (int) p2.getY();
                    int x = (int) Math.abs(DragFrame2.this.p2.getX()-DragFrame2.this.p.getX());
                    int y = (int) Math.abs(DragFrame2.this.p2.getY()-DragFrame2.this.p.getY());
                    int px,py;
                    px = Math.min(x2, x1);
                    py = Math.min(y2, y1);
                    jback.setBounds(px,py,x,y);
                    paintPanel.repaint();
                }
            }

            @Override
            public void mouseMoved(MouseEvent e) {
                super.mouseMoved(e);
            }

            @Override
            public int hashCode() {
                return super.hashCode();
            }

            @Override
            public boolean equals(Object obj) {
                return super.equals(obj);
            }

            @Override
            protected Object clone() throws CloneNotSupportedException {
                return super.clone();
            }

            @Override
            public String toString() {
                return super.toString();
            }

            @Override
            protected void finalize() throws Throwable {
                super.finalize();
            }
        });
        paintPanel.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent e) {
            }

            @Override
            public void mousePressed(MouseEvent e) {
                DragFrame2.this.p = e.getPoint();
                System.out.println("Click Listener PRESS"+p);

            }

            @Override
            public void mouseReleased(MouseEvent e) {
                DragFrame2.this.p = null;
                DragFrame2.this.p2 = null;
                jback.setBounds(0,0,0,0);
                paintPanel.repaint();
            }

            @Override
            public void mouseEntered(MouseEvent e) {

            }

            @Override
            public void mouseExited(MouseEvent e) {

            }
        });
    }

    public static void main(String[] args) {
        DragFrame2 df = new DragFrame2();
        df.setVisible(true);
    }
}

 

标签:java,实现,void,DragFrame2,int,paintPanel,Override,框选,public
来源: https://blog.csdn.net/m0_46531302/article/details/122733650

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有