编程语言
首页 > 编程语言> > java实现框选框

java实现框选框

作者:互联网

主要通过调用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