使用 JAVA AWT mousemotionlistener 在 java 小程序中绘制动态线?
Drawing dynamic lines in java applets using JAVA AWT mousemotionlistener?
所以,事情是这样的。我的讲师教我们如何通过单击小程序来获取鼠标坐标。现在,我在想也许我可以尝试使用 mousemotionlistener class 使用 mousedrag 方法和鼠标坐标绘制动态线。我试过了,但无法真正让它发挥作用。任何人都可以建议我在哪里犯了错误。非常感谢。
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.applet.*;
public class drawing extends Applet
implements MouseMotionListener {
int mx,my;
Graphics2D g2;
public void init()
{
this.addMouseMotionListener(this);
}
public void paint(Graphics g)
{
this.setSize(800,600);
g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(10));
g2.drawLine(40,50,200,150); // I was experimenting to draw static lines using the drawLine() method.
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
mx = e.getX();
my = e.getY();
System.out.println(" "+ mx + " "+ my);
g2.setStroke(new BasicStroke(10));
g2.drawLine(mx,my,mx,my);
}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
为了画一条线,你需要知道起点(用户点击的点)和终点(用户拖动到的点),从这里有一个简单的事情简单使用 Graphics#drawLine
.
首先查看 How to Write a Mouse Listener, 2D Graphics and Painting in AWT and Swing 了解更多详情
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
public class Drawing extends Applet
implements MouseMotionListener, MouseListener {
private Point startPoint, endPoint;
public void init() {
this.addMouseMotionListener(this);
addMouseListener(this);
}
@Override
public void paint(Graphics g) {
super.paint(g);
if (startPoint != null && endPoint != null) {
g.drawLine(startPoint.x, startPoint.y, endPoint.x, endPoint.y);
}
}
@Override
public void mouseDragged(MouseEvent e) {
endPoint = e.getPoint();
repaint();
}
@Override
public void mouseMoved(MouseEvent arg0) {
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
startPoint = e.getPoint();
endPoint = e.getPoint();
repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
现在,我的建议是,不要直接使用 Applet
或 AWT。相反,从 JPanel
开始并覆盖它的 paintComponent
方法并使用它执行您的自定义绘画。然后将此面板添加到JFrame
以在屏幕上显示它。
AWT 已经过时了 15 年以上,而 applet 可以解决许多您现在不需要处理的问题。
先看看 Creating a GUI With JFC/Swing,甚至研究一下 JavaFX
所以,事情是这样的。我的讲师教我们如何通过单击小程序来获取鼠标坐标。现在,我在想也许我可以尝试使用 mousemotionlistener class 使用 mousedrag 方法和鼠标坐标绘制动态线。我试过了,但无法真正让它发挥作用。任何人都可以建议我在哪里犯了错误。非常感谢。
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.applet.*;
public class drawing extends Applet
implements MouseMotionListener {
int mx,my;
Graphics2D g2;
public void init()
{
this.addMouseMotionListener(this);
}
public void paint(Graphics g)
{
this.setSize(800,600);
g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(10));
g2.drawLine(40,50,200,150); // I was experimenting to draw static lines using the drawLine() method.
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
mx = e.getX();
my = e.getY();
System.out.println(" "+ mx + " "+ my);
g2.setStroke(new BasicStroke(10));
g2.drawLine(mx,my,mx,my);
}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
为了画一条线,你需要知道起点(用户点击的点)和终点(用户拖动到的点),从这里有一个简单的事情简单使用 Graphics#drawLine
.
首先查看 How to Write a Mouse Listener, 2D Graphics and Painting in AWT and Swing 了解更多详情
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
public class Drawing extends Applet
implements MouseMotionListener, MouseListener {
private Point startPoint, endPoint;
public void init() {
this.addMouseMotionListener(this);
addMouseListener(this);
}
@Override
public void paint(Graphics g) {
super.paint(g);
if (startPoint != null && endPoint != null) {
g.drawLine(startPoint.x, startPoint.y, endPoint.x, endPoint.y);
}
}
@Override
public void mouseDragged(MouseEvent e) {
endPoint = e.getPoint();
repaint();
}
@Override
public void mouseMoved(MouseEvent arg0) {
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
startPoint = e.getPoint();
endPoint = e.getPoint();
repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
现在,我的建议是,不要直接使用 Applet
或 AWT。相反,从 JPanel
开始并覆盖它的 paintComponent
方法并使用它执行您的自定义绘画。然后将此面板添加到JFrame
以在屏幕上显示它。
AWT 已经过时了 15 年以上,而 applet 可以解决许多您现在不需要处理的问题。
先看看 Creating a GUI With JFC/Swing,甚至研究一下 JavaFX