Java 矩形 拖动_如何使用鼠标拖动事件在Java Applet上绘制矩形并使其停留

小编典典

好吧,在重新阅读您的问题后,似乎您不必担心拥有多个矩形:)

这是一次只能解决一个问题的解决方案(与您开始时的解决方案很接近):

import java.awt.BorderLayout;

import java.awt.Graphics;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.SwingConstants;

public class MouseTracker4July extends JFrame implements MouseListener, MouseMotionListener {

private static final long serialVersionUID = 1L;

private final JLabel mousePosition;

int x1, x2, y1, y2;

int x, y, w, h;

private final JLabel recStart;

private final JLabel recStop;

private final JLabel cords; // set up GUI and register mouse event handlers

boolean isNewRect = true;

public MouseTracker4July() {

super( "Rectangle Drawer" );

this.mousePosition = new JLabel();

this.mousePosition.setHorizontalAlignment( SwingConstants.CENTER );

getContentPane().add( this.mousePosition, BorderLayout.CENTER );

JLabel text1 = new JLabel();

text1.setText( "At the center the mouse pointer's coordinates will be displayed." );

getContentPane().add( text1, BorderLayout.SOUTH );

this.recStart = new JLabel();

getContentPane().add( this.recStart, BorderLayout.WEST );

this.recStop = new JLabel();

getContentPane().add( this.recStop, BorderLayout.EAST );

this.cords = new JLabel();

getContentPane().add( this.cords, BorderLayout.NORTH );

addMouseListener( this ); // listens for own mouse and

addMouseMotionListener( this ); // mouse-motion events

setSize( 800, 600 );

setVisible( true );

}

// MouseListener event handlers // handle event when mouse released immediately after press

public void mouseClicked( final MouseEvent event ) {

this.mousePosition.setText( "Clicked at [" + event.getX() + ", " + event.getY() + "]" );

repaint();

}

// handle event when mouse pressed

public void mousePressed( final MouseEvent event ) {

this.mousePosition.setText( "Pressed at [" + ( this.x1 = event.getX() ) + ", " + ( this.y1 = event.getY() ) + "]" );

this.recStart.setText( "Start: [" + this.x1 + ", " + this.y1 + "]" );

this.isNewRect = true;

repaint();

}

// handle event when mouse released after dragging

public void mouseReleased( final MouseEvent event ) {

this.mousePosition.setText( "Released at [" + ( this.x2 = event.getX() ) + ", " + ( this.y2 = event.getY() ) + "]" );

this.recStop.setText( "End: [" + this.x2 + ", " + this.y2 + "]" );

repaint();

}

// handle event when mouse enters area

public void mouseEntered( final MouseEvent event ) {

this.mousePosition.setText( "Mouse entered at [" + event.getX() + ", " + event.getY() + "]" );

repaint();

}

// handle event when mouse exits area

public void mouseExited( final MouseEvent event ) {

this.mousePosition.setText( "Mouse outside window" );

repaint();

}

// MouseMotionListener event handlers // handle event when user drags mouse with button pressed

public void mouseDragged( final MouseEvent event ) {

this.mousePosition.setText( "Dragged at [" + ( this.x2 = event.getX() ) + ", " + ( this.y2 = event.getY() ) + "]" ); // call repaint which calls paint repaint();

this.isNewRect = false;

repaint();

}

// handle event when user moves mouse

public void mouseMoved( final MouseEvent event ) {

this.mousePosition.setText( "Moved at [" + event.getX() + ", " + event.getY() + "]" );

repaint();

}

@Override

public void paint( final Graphics g ) {

super.paint( g ); // clear the frame surface

g.drawString( "Start Rec Here", this.x1, this.y1 );

g.drawString( "End Rec Here", this.x2, this.y2 );

int width = this.x1 - this.x2;

int height = this.y1 - this.y2;

this.w = Math.abs( width );

this.h = Math.abs( height );

this.x = width < 0 ? this.x1

: this.x2;

this.y = height < 0 ? this.y1

: this.y2;

if ( !this.isNewRect ) {

g.drawRect( this.x, this.y, this.w, this.h );

}

this.cords.setText( "w = " + this.w + ", h = " + this.h );

}

public static void main( final String args[] ) {

MouseTracker4July application = new MouseTracker4July();

application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

}

} // end class MouseTracker

2020-11-16

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值