【问题标题】:Java painting program giving many errorsJava绘画程序给出了许多错误
【发布时间】:2015-08-08 18:46:55
【问题描述】:

我想做一个简单的绘画程序。因此,当您拖动鼠标时,会在 GUI 中绘制一条线。问题是当用户拖动鼠标时,它会自动绘制,但我的代码不起作用。有人可以告诉我怎么做吗?对不起我的英语,如果你不明白我的问题,看看我的代码也许你会比。

我的主要课程:

import javax.swing.JFrame;
public class MainClass {
    public static void main(String args[]){
        tuna kip = new tuna();
        kip.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        kip.setSize(800,600);
        kip.setVisible(true);
    }
}

这是我的另一堂课:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class tuna extends JFrame {
    JPanel jpanel = new JPanel();

    public tuna(){
        super("Painting Program");
        jpanel.setBackground(Color.WHITE);
        add(jpanel);

        hand handler = new hand();
        jpanel.addMouseListener(handler);
        jpanel.addMouseMotionListener(handler);
    }

    private class hand implements MouseListener ,MouseMotionListener { //THE ERRORS START TO APPEAR HERE
        public void mouseDragged(MouseEvent event){
            public void paintComponent(Graphics g){
                super.paintComponent(g);
                g.setColor(Color.BLACK);
                g.fillRect(event.getX(), event.getY(), 5, 5);
            }
        }
    }
}

【问题讨论】:

  • 错误信息是?
  • 这段代码甚至无法编译
  • 当我尝试运行代码时,我收到太多错误消息,总共大约 70,000 个字符。但他们都在谈论 java.awt...

标签: java swing user-interface awt


【解决方案1】:

当我尝试运行代码时,我收到太多错误消息:

你的意思是当你尝试compile你得到编译错误的代码。

class hand implements MouseListener ,MouseMotionListener 

您的类并未实现这些侦听器中的所有方法。你只实现一种方法。

阅读 How to Write a MouseMotionListener 上的 Swing 教程中的部分以获取工作示例。

如果你只关心mouseDragged()方法那么你只需要实现MouseMotionListener

或者作为更简单的解决方案,您可以扩展MouseMotionAdapter。这个类实现了MouseMotionListener的所有方法,所以你只需要重写你想要改变的方法。本教程还讨论了适配器。

最后,类名应该以大写字符开头。查看 Java API,您会注意到这一点。遵循 Java 约定,不要自己编造。

【讨论】:

  • 谢谢,我修复了mousemotionlistener问题,但是当我尝试在鼠标拖动时绘制一些东西时,Eclipse给出了太多错误。我认为 public void paintComponent(Graphics g){ 是拖动鼠标时绘制东西的错误方法。你能告诉我如何以正确的方式执行这段代码: public void mouseDragged(MouseEvent event){ public void paintComponent(Graphics g){ super.paintComponent(g); g.setColor(Color.BLACK); g.fillRect(event.getX(), event.getY(), 5, 5);
  • @HugoCornel,查看Custom Painting Approaches 了解如何在拖动鼠标时绘制矩形的工作示例。您将需要修改代码以绘制一条简单的线,但概念是相同的。
【解决方案2】:

是的,您的代码中有很多问题。我只是对其进行了编辑并使其至少可以运行。只需对其进行研究和实验。我希望你能从中学到一些东西,即使我没有解释所有的变化。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class tuna extends JFrame {
    int x, y, w, h;

    MyPanel jpanel = new MyPanel();

    public tuna(){
        super("Painting Program");
        setLayout(new BorderLayout());
        jpanel.setBackground(Color.WHITE);
        add(jpanel);

        hand handler = new hand();
        jpanel.addMouseListener(handler);
        jpanel.addMouseMotionListener(handler);
    }

    private class hand implements MouseListener , MouseMotionListener { //THE ERRORS START TO APPEAR HERE
        public void mouseClicked(MouseEvent e) {
        }

        public void mousePressed(MouseEvent e) {
            x=e.getX();
            y=e.getY();
        }

        public void mouseReleased(MouseEvent e) {
        }

        public void mouseEntered(MouseEvent e) {
        }

        public void mouseExited(MouseEvent e) {
        }

        public void mouseDragged(MouseEvent e) {
            w = e.getX() - x;
            h = e.getY() - y;
            jpanel.repaint();
        }

        public void mouseMoved(MouseEvent e) {
        }
    }

    class MyPanel extends JPanel {
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            g.setColor(Color.BLACK);
            g.fillRect(x, y, w, h);
        }
    }
}

【讨论】:

  • 非常感谢,我现在对 GUI 的理解更好了 :)
猜你喜欢
  • 2023-03-23
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多