繁体   English   中英

使用Swing和鼠标侦听器制作绘图应用程序

[英]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方法中,创建可怕的绘图类的实例。

请注意,我不理解此要求:

最后一个绘制图纸。

请发布确切要求。


如果这是我的申请,我会

  • 在JPanel而不是JFrame中进行绘图吗
  • 在JPanel的paintComponent方法而不是paint方法中进行操作。
  • 确保在我的JPanel的paintComponent方法重写中调用上级的paintComponent方法。
  • 然后将我的JPanel放置在JFrame中以显示它。
  • 我不会让我的GUI类实现MouseListener,而是为此使用嵌套的内部类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM