[英]Making a drawing application using swing and mouse listener
我有一个任务,要使用挥杆和鼠标侦听器制作一个简单的绘图应用程序。 应用程序必须具有三个类,一个包含Main,一个包含框架,最后一个用于绘制图形。 老师给了我们一个我们应该用来完成作业的源代码,它看起来像这样:
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
public class Drawsome extends JFrame implements MouseMotionListener {
public Drawsome(){
setSize(300,400);
setForeground(Color.black);
show();;
addMouseMotionListener(this);
}
public void mouseDragged(MouseEvent evt) {
start = end;
end = new Point(evt.getX(),evt.getY());
repaint();
}
public void mouseMoved(MouseEvent evt) {
end = null;
}
public void paint(Graphics g) {
if (start!=null && end!=null)
g.drawLine(start.x, start.y, end.x, end.y);
}
public void update(Graphics g) {
paint(g);
}
Point start=null;
Point end=null;
}
现在可以完美地工作了,但是由于我们必须在另一个类中制作框架,所以我尝试这样做:
import java.awt.Color;
import javax.swing.JFrame;
public class MainWindow extends JFrame {
public MainWindow() {
setSize(300,400);
setForeground(Color.black);
show();;
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
public class Drawsome extends JFrame implements MouseMotionListener {
public Drawsome(){
MainWindow mainwindow = new MainWindow();
addMouseMotionListener(this);
} (rest is the same as the previous code)
我会得到一个框架,但其余的框架将无法正常工作,我不知道自己在做什么错,因此非常感谢朝正确方向的推动
老师的源代码很糟糕,因为您永远都不能在paint方法或JFrame中进行绘制,而且他/她的绘画替代方法不会调用super的方法,从而破坏了绘画链。 他们似乎不知道自己在做什么。
话虽如此,您的主驱动程序不应扩展JFrame,也不应尝试为其创建JFrame甚至它的实例。 而是在此类的main方法中,创建可怕的绘图类的实例。
请注意,我不理解此要求:
最后一个绘制图纸。
请发布确切要求。
如果这是我的申请,我会
paintComponent
方法而不是paint方法中进行操作。 paintComponent
方法重写中调用上级的paintComponent
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.