我想制作一个简单的绘画程序。因此,当您拖动鼠标时,一条线将在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);
}
}
}
}
答案 0 :(得分:4)
当我尝试运行代码时,我收到太多错误消息:
您的意思是当您尝试compile
代码时,您会收到编译错误。
class hand implements MouseListener ,MouseMotionListener
您的类没有实现这些侦听器中的所有方法。您只实现一种方法。
阅读How to Write a MouseMotionListener上的Swing教程中的部分以获取工作示例。
如果您只关心mouseDragged()
方法,那么您只需要实施MouseMotionListener
。
或者作为一种更简单的解决方案,您可以扩展MouseMotionAdapter
。此类实现MouseMotionListener
的所有方法,因此您只需要覆盖要更改的方法。本教程还讨论了适配器。
最后类名应该以大写字母开头。查看Java API,您会注意到这一点。遵循Java惯例,不要自己编写。
答案 1 :(得分: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);
}
}
}