java - 使用 swing 和鼠标监听器制作绘图应用程序

标签 java swing

我有一个任务是使用 swing 和鼠标监听器制作一个简单的绘图应用程序。应用程序必须具有三个类,一个包含 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中绘图,而且他/她的paint重写不会调用super的方法,从而破坏了绘画链。他们似乎不知道自己在做什么。

话虽如此,您的主驱动程序不应扩展 JFrame,也不应尝试创建它的 JFrame 甚至它的实例。相反,在此类的 main 方法中,创建可怕的绘图类的实例。

请注意,我不明白这个要求:

and the last one that makes the drawing.

请发布确切要求。

<小时/>

如果这是我的应用程序,我会

  • 在 JPanel 中进行绘图,而不是 JFrame
  • 在 JPanel 的 paintComponent 方法中执行此操作,而不是在 Paint 方法中。
  • 请务必在 JPanel 的 paintComponent 方法重写中调用 super 的 paintComponent 方法。
  • 然后将我的 JPanel 放入 JFrame 中以显示它。
  • 我不会让我的 GUI 类实现 MouseListener,而是为此使用嵌套内部类。

关于java - 使用 swing 和鼠标监听器制作绘图应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33418952/

相关文章:

java - 了解 Swing 计时器

java - 在 JTable 单元格上编辑没有效果

java - JFormattedTextfield 仅在按下回车时验证

java - JComponent 上的绘图故障

java - Spring @OneToMany 问题

java - 字节平均值

java - 这个条件有什么问题吗?

java - MongoDB 聚合结果作为嵌套 Json

java Jpanel 和边框布局,向 PAGE_END 添加 2 个组件

java - 将 JLabel 设置为 JTextArea 顶部并向下移动 JTextArea