2017-08-11 81 views
-1

有人可以帮我解决这个问题,我一直在学习以Java编程的一本书,复制其中一个程序,并且它的工作原理是mouseDragged不起作用。无法点击'Hello Java!'文本并将其拖动到屏幕上。我已经包含了这个程序,但是我不知道我出了什么问题或者我错过了什么。 我看过这篇文章:“MouseDragged & MouseMoved不能在Java Applet中工作”,但这些方法都在我的程序中。MouseDragged不能正常工作

//file: HelloJava3.java 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 


public class HelloJava3 { 

public static void main(String[] args) { 
    JFrame frame = new JFrame("HelloJava3"); 
    frame.add(new HelloComponent3("Hello, Java!")); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(300, 300); 
    frame.setVisible(true); 

} 

} 

class HelloComponent3 extends JComponent 
implements ActionListener, MouseMotionListener 
{ 
    String theMessage; 
    int messageX = 125, messageY = 95; //Coordinates of the message 

    JButton theButton; 

    int colorIndex; //Current index into someColors 
    static Color[] someColors = { 
      Color.black, Color.red,    Color.green, Color.blue, Color.magenta 
    }; 

public HelloComponent3(String message) { 
    theMessage = message; 
    theButton = new JButton("Change Color"); 
    setLayout(new FlowLayout()); 
    add(theButton); 
    theButton.addActionListener(this); 
    addMouseMotionListener(this); 
} 

public void paintComponent(Graphics g) { 
    g.drawString(theMessage, messageX, messageY); 
} 

public void mouseDgragged(MouseEvent e) { 
    messageX = e.getX(); 
    messageY = e.getY(); 
    repaint(); 
} 

public void mouseMoved(MouseEvent e) {} 

public void actionPerformed(ActionEvent e) { 
    // Did somebody push out button? 
    if (e.getSource() == theButton) 
     changeColor(); 
} 

synchronized private void changeColor() { 
    //Change the index to the next colour, awkwardly. 
    if (++colorIndex == someColors.length) 
     colorIndex = 0; 
    setForeground(currentColor()); // Use the new colour. 
    repaint(); 
} 

synchronized private Color currentColor() { 
    return someColors[colorIndex]; 
} 

@Override 
public void mouseDragged(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 
} 
+0

而不是复制代码,学习概念,这将进一步得到你。在发布问题之前,还需要搜索并学习相关教程,因为通常会发现许多教程(包括如何在Swing中使用鼠标监听器和鼠标移动监听器)。 –

+0

通过复制代码以及您在此过程中犯的所有错误,您可以从解决这些问题中学到很多东西。教程是伟大的,但能够调试更大,是的,我没有发布之前寻找答案。 – Kalmiany

回答

1

mouseDragged方法正在被覆盖并且什么都不做。你应该删除这个或定义它。我将删除重写的一个,并将@Override注释添加到另一个mouseDragged方法中,假定它是您正在扩展的接口所需的。

删除此:

@Override 
public void mouseDragged(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 

或许应该出现这样的代码:

@Override 
public void mouseDragged(MouseEvent e) { 
    messageX = e.getX(); 
    messageY = e.getY(); 
    repaint(); 
} 
+0

谢谢你,我从你的解释和你的和平代码中学到了很多东西。现在起作用了。 – Kalmiany

+0

很高兴能够提供帮助,请点击解决方案旁边的复选标记,接受此问题为正确答案。学习代码是有益的,保持良好的工作。 – dspano