2015-04-15 48 views
2

我有一个扩展JFrame的Gui类。顶部有一个JMenuBar,其余的由一个大的JTextField组成。MouseListener - 无法处理JTextArea

我已经实现了这个类的mouseListener,问题在于它只能在JMenuBar而不是JTextArea上单击时进行监听。所以我的问题是如何让MouseListener的反应鼠标点击了GUI类的JTextArea

继承人snappshot(构造函数)

public class Gui extends JFrame implements ActionListener, MouseListener { 

private JMenu fileMenu; 
private JTextArea textArea; 
private JFileChooser chooser; 

public static void main(String[] args) { 

    new Gui().setVisible(true); 

} 

public Gui() { 

    setSize(600, 600); 
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
    setLocation(dim.width/2-this.getSize().width/2, dim.height/2-this.getSize().height/2); 

    createFileMenu(); 

    JMenuBar menuBar = new JMenuBar(); 
    setJMenuBar(menuBar); 
    menuBar.add(fileMenu); 

    textArea = new JTextArea(); 

    JScrollPane scroll = new JScrollPane (textArea, 
    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 

    Container contentPane = getContentPane(); 
    contentPane.add(scroll); 

    chooser = new JFileChooser(); 

    addMouseListener(this); 

    setDefaultCloseOperation(EXIT_ON_CLOSE); 

} 

Screenshot

+0

为什么'MouseListener'会对'JFrame'(你注册它的地方)出现的鼠标事件做出反应?可能[如何编写鼠标监听程序](http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html)可以提供帮助 – MadProgrammer

+0

至少有两种可能的解决方案来解决您的问题,但是您希望使用将取决于你试图实现什么 – MadProgrammer

+0

@MadProgrammer - 哎呀,是的,你是对的。我怎么会想念那个? – java

回答

3

添加鼠标监听到textarea的,而不是的窗户。

textArea = new JTextArea(); 
textArea.addMouseListener(this); 
+0

有很好的抓住:-) – java