2015-06-28 6 views
1

У меня проблемы с проверкой, нажата ли мышь с помощью JFrame. Когда я использую public void mousePressed(MouseEvent e), чтобы напечатать что-то, и я нажимаю мышью, он ничего не печатает. Он не дает ошибки, он просто ничего не печатает. Вот мой код:Java: проверьте, нажата ли мышь

import java.awt.event.MouseEvent; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 


public class tuna extends JFrame 
{ 
private JTextArea textArea; 



public static void main(String[] args) 
{ 
    //Run the program 
tuna run = new tuna(); 
run.setDefaultCloseOperation(3); 
run.setSize(1200, 1000); 

run.setVisible(true); 
} 

public tuna() 
{ 


    super("Simple JFrame"); 

    //add a simple JScrollPane 
    textArea = new JTextArea(10,10); 
    JScrollPane scrollPane = new JScrollPane(textArea); 
    textArea.setEditable(true); 

    add(scrollPane); 

} 
//This doesn't print anything when i am clicking in the JFrame 
public void mousePressed(MouseEvent e) 
{ 
    if(e.getButton() == MouseEvent.BUTTON1) 
    { 
     System.out.println("left"); 
    }  
    else if(e.getButton() == MouseEvent.BUTTON3) 
    { 
     System.out.println("right"); 
    } 
} 


} 

Спасибо заранее.

+0

Посмотрите на [Обработчики событий] (http://docs.oracle.com/javase/7/docs/api/java/beans/EventHandler.html). Просто написать метод mousePressed() 'не поможет обрабатывать события щелчка мыши. – Codebender

ответ

1

Вы можете сделать свой собственный приемник мыши и добавить его в textArea или другой компонент. Например, как это:

public class tuna extends JFrame 
{ 
    private JTextArea textArea; 



    public static void main(String[] args) 
    { 
     //Run the program 
     tuna run = new tuna(); 
     run.setDefaultCloseOperation(3); 
     run.setSize(1200, 1000); 

     run.setVisible(true); 
    } 

    public tuna() 
    { 


     super("Simple JFrame"); 

     //add a simple JScrollPane 
     textArea = new JTextArea(10,10); 
     JScrollPane scrollPane = new JScrollPane(textArea); 
     textArea.setEditable(true); 
     textArea.addMouseListener(new CustomListener()); 


     add(scrollPane); 

    } 
    //This doesn't print anything when i am clicking in the JFrame 
    public class CustomListener implements MouseListener { 

     @Override 
     public void mouseClicked(MouseEvent mouseEvent) { 
      if(mouseEvent.getButton() == MouseEvent.BUTTON1) 
      { 
       System.out.println("left"); 
      } 
      else if(mouseEvent.getButton() == MouseEvent.BUTTON3) 
      { 
       System.out.println("right"); 
      } 
     } 

     @Override 
     public void mousePressed(MouseEvent mouseEvent) { 

     } 

     @Override 
     public void mouseReleased(MouseEvent mouseEvent) { 

     } 

     @Override 
     public void mouseEntered(MouseEvent mouseEvent) { 

     } 

     @Override 
     public void mouseExited(MouseEvent mouseEvent) { 

     } 
    } 
} 
1
  1. Ну есть несколько вопросов, в вашем концепции и исходный код

    Прежде всего, необходимо MouseListener, так что в вашем случае либо вы можете создать отдельный MouseListener или использовать текущий JFrame класс сам, как это

    public class Tuna extends JFrame implements MouseListener

  2. Также я бы рекомендовал следовать правильному соглашению об именах и использовать Tuna вместо tuna.

  3. Тогда элемент, который вы хотите, чтобы ответить на MouseEvents должен быть регистра с MouseListener, созданными в первом шаге, в конструкторе.

    textArea.addMouseListener(this);

  4. Также убедитесь, что на то, что элемент, который вы хотите зарегистрировать ваш MouseListener, в настоящее время вся ваша рама покрыта TextArea, так регистрации слушателя JFrame не поможет, а не добавлять его на JTextArea

  5. Попробуйте использовать @Override аннотацию, где это возможно, редактор показывает соответствующие ошибки компиляции, то в вашем случае, если вы только что написали,

    public void mousePressed(MouseEvent e)

    вместо

    @Override

    public void mousePressed(MouseEvent e)

    В этом методы работает только если вы реализуете MouseListener

Обратитесь по ссылке для получения дополнительной understan ding, https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html