允许用户画线的Java挑战第2部分

允许用户画线的Java挑战第2部分,java,graphics,drawing,awt,mouseevent,Java,Graphics,Drawing,Awt,Mouseevent,我的问题已经在中提到,但是,我仍然有困难,因为当鼠标被点击和拖动时,我的应用程序上没有显示任何行 回答这个问题肯定会帮助大多数初学者更好地理解图形类和绘图,这通常是一个复杂的过程,特别是对于初学者来说 根据我正在使用的文本(因为我正在自学Java),这是如何使用Java画线的示例: /* * LineTest * Demonstrates drawing lines */ import java.awt.*; public class LineTest extends Canvas {

我的问题已经在中提到,但是,我仍然有困难,因为当鼠标被点击和拖动时,我的应用程序上没有显示任何行

回答这个问题肯定会帮助大多数初学者更好地理解图形类和绘图,这通常是一个复杂的过程,特别是对于初学者来说

根据我正在使用的文本(因为我正在自学Java),这是如何使用Java画线的示例:

/*
 * LineTest
 * Demonstrates drawing lines
 */

import java.awt.*;
public class LineTest extends Canvas {

public LineTest() {
    super();
    setSize(300, 200);
    setBackground(Color.white);
}

public static void main(String args[]) {
    LineTest lt = new LineTest();
    GUIFrame frame = new GUIFrame("Line Test");
    frame.add(lt);
    frame.pack();
    frame.setVisible(true);
}

public void paint(Graphics g) {
    g.drawLine(10, 10, 50, 100);
    g.setColor(Color.blue);
    g.drawLine(60, 110, 275, 50);
    g.setColor(Color.red);
    g.drawLine(50, 50, 300, 200);
}
}
规格为:

Create an application that allows you to draw lines by clicking the initial 
point and draggingthe mouse to the second point. The application should be 
repainted so that you can see the line changing size and position as you
are dragging the mouse. When the mouse button is eleased, the line is drawn.
如您所知,运行此程序不会由用户创建任何图形。我相信这个错误是由于缺少鼠标释放方法而导致的

非常感谢您的帮助。提前感谢您在这件事上的所有时间和合作

我回答这个问题的代码是:

import java.awt.*;
import java.awt.event.*;

public class LineDrawer2 extends Canvas {

    int x1, y1, x2, y2;

      public LineDrawer2() {
          super();
    setSize(300,200);
    setBackground(Color.white);
      }

public void mousePressed(MouseEvent me) {
          int x1 = me.getX();
    int y1 = me.getY();
          x2 = x1;
    y2 = y1;
    repaint();
}

      public void mouseDragged(MouseEvent me) {
    int x2 = me.getX();
    int y2 = me.getY();
    repaint();
}

public void mouseReleased(MouseEvent me) {
}

      public void paint(Graphics g) {
    super.paint(g);
    g.setColor(Color.blue);
          g.drawLine(x1, y1, x2, y2);
}

public static void main(String args[]) {
    LineDrawer2 ld2 = new LineDrawer2();
    GUIFrame frame = new GUIFrame("Line Drawer");
    frame.add(ld2);
    frame.pack();
    frame.setVisible(true);
}

public void mouseMoved(MouseEvent me) {
}
public void mouseClicked(MouseEvent me) {
}
public void mouseEntered(MouseEvent me) {
}
public void mouseExited(MouseEvent me) {
}

}

注:我从上次的回复中了解到这是一种旧格式,但是,如果可能的话,请让我知道使用旧格式,我也一定会学习新格式。我衷心感谢

您正在初始化局部变量,而不是初始化事件处理方法中的字段。而不是

int x2 = me.getX();
int y2 = me.getY();
应该是

this.x2 = me.getX();
this.y2 = me.getY();
或者干脆

x2 = me.getX();
y2 = me.getY();
编辑:

另一个问题是,即使您的类有mousePressed()、mouseDragged()等方法,它也没有实现MouseListener和MouseMotionListener。最后,它不会向自身添加任何此类侦听器。因此,应按照以下方式修改代码:

public class LineDrawer2 extends Canvas implements MouseListener, MouseMotionListener {
    ...
    public LineDrawer2() {
        ...
        addMouseListener(this);
        addMouseMotionListener(this);
    }
我的建议是:每次向类添加方法(如
mousePressed()
),并且该方法应该重写类或接口中的方法时,请使用
@override
对其进行注释。这样,如果方法实际上没有重写任何方法,编译器将生成编译错误:

@Override
public void mousePressed(MouseEvent e) {

}

非常感谢你的帮助。然而,即使如此,出于某种原因,我的程序仍然不能正确运行,因为我没有看到正在绘制的线。我很抱歉打扰你:(非常感谢!工作做得很好!:)祝你度过愉快的一天!你真棒!