Java挑战允许用户绘制行第2部分



我的问题在Java Challenge中被暗示,允许用户绘制一条线,但是,我仍然有困难。

回答这个问题肯定会帮助大多数初学者的程序员更好地了解图形类别和绘图,这通常是一个复杂的过程,尤其是对于初学者而言。

根据我正在使用的文本(当我自己学习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) {
}
}

P.S。:我从上次答复中了解这是一种旧格式,但是,如果可能的话,请让我知道使用旧格式,我一定也会学习新的。我真诚地感激它。

您是初始化本地变量,而不是在事件处理方法中初始化字段。而不是

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) {
}

相关内容

  • 没有找到相关文章

最新更新