Java: как сохранить статус MouseButton?

1

Поэтому я пишу программу, которая сохраняет кнопку мыши (в настоящее время просто mousePressed, но будет добавлять mouseReleased, как только это будет работать) статус для файла журнала. Как мне это сделать?
Текущий код:

import static com.sun.java.accessibility.util.AWTEventMonitor.addMouseListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

public class mouse {
public static void main(String[] args) throws InterruptedException{
mouse();

} 
public static void mouse() throws InterruptedException{
for(int i=0;i<10000;i++){
    addMouseListener(new MouseAdapter() { 
        public void mousePressed(MouseEvent me) { 
        writeToFile(me);    //writeToFile saves the me value to txt
        } 
       });
    TimeUnit.MILLISECONDS.sleep(1); // time delay, so it saves every 1ms
}
}


public static void writeToFile(MouseEvent me){

try{
    String data =" "+me+" ";

    File file =new File("log.txt");

    //if log.txt doesn't exist, it makes it
    if(!file.exists()){
        file.createNewFile();
    }

    //true = write
        FileWriter fileWritter = new FileWriter(file.getName(),true);
        BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
        bufferWritter.write(data);
        bufferWritter.close();


    }catch(IOException e){
    }
}

}

Программа компилируется и запускается, но ничего не делает.
Я благодарю вас всех заблаговременно.

  • 0
    Вероятно, это связано с тем, что цикл создает новых слушателей. Взгляните на документы mouseListener : docs.oracle.com/javase/tutorial/uiswing/events/…
  • 0
    Нет, я попытался положить цикл внутри, чтобы он writeToFile(me); просто writeToFile(me); линия, но это все равно ничего не делает.
Показать ещё 1 комментарий
Теги:
logging
mouse

1 ответ

1
Лучший ответ

Если вы не пытаетесь создать графический интерфейс и вместо этого хотите записывать общую позицию мыши, добавление MouseListener в ваш класс не принесет пользы. Вместо этого поймите, что Java не оптимизирован для этого типа программы, и вам, скорее всего, придется использовать JNA или JNI для захвата кода обработки мыши операционной системы. Если, с другой стороны, вы хотите уловить использование мыши графическим интерфейсом Swing, тогда вам сначала нужно создать графический интерфейс Swing, а затем добавить к нему свой MouseListener. Я бы посоветовал вам прочитать учебник MouseListener для получения дополнительной информации об этом.


редактировать
Вы заявляете:

В конечном счете, это будет часть приложения GUI, я просто пытаюсь сделать это.

Пожалуйста, поймите, что MouseListener не будет функционировать, не добавляя его к компоненту, который принимает его, который в конечном итоге расширяется из типа Component и отображается в графическом интерфейсе. Поэтому, чтобы проверить вашу концепцию, вам снова понадобится создать графический интерфейс Swing и добавить MouseListener к одному из визуализированных компонентов вашего графического интерфейса. Опять же, пожалуйста, прочитайте учебники MouseListener.


Что касается перезаписи файла, это не так, я взял его из своей предыдущей программы и работает нормально.

Извините, мой плохой - я неправильно читаю ваш код.


Изменить 2
И, как отмечено в комментарии, слушатель не должен иметь циклы, а должен реагировать на события мыши. Например, следующий код прослушивает нажатия мыши, отпускания и перетаскивания мыши и отображает информацию в JTextArea. Было бы тривиально изменить это для записи в файл:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.*;

@SuppressWarnings("serial")
public class SimpleMouseListenerEg extends JPanel {
   private static final int PREF_W = 600;
   private static final int PREF_H = 400;
   private JPanel listenedToPanel = new JPanel();
   private JTextArea textArea = new JTextArea(10, 25);

   public SimpleMouseListenerEg() {
      listenedToPanel.setBorder(BorderFactory.createTitledBorder("Listened To Panel"));
      MouseAdapter myMouseAdapter = new MyMouseAdapter();
      listenedToPanel.addMouseListener(myMouseAdapter);
      listenedToPanel.addMouseMotionListener(myMouseAdapter);

      textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
      JScrollPane scrollPane = new JScrollPane(textArea);
      scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

      setLayout(new BorderLayout());
      add(listenedToPanel, BorderLayout.CENTER);
      add(scrollPane, BorderLayout.EAST);
   }

   @Override
   public Dimension getPreferredSize() {
      return new Dimension(PREF_W, PREF_H);
   }

   // a combination MouseListener and MouseMotionListener
   private class MyMouseAdapter extends MouseAdapter {
      private String template = "%-10s [%03d, %03d]%n";

      @Override
      public void mousePressed(MouseEvent mEvt) {
         String text = String.format(template, "Pressed", mEvt.getX(), mEvt.getY());
         textArea.append(text);
      }

      @Override
      public void mouseReleased(MouseEvent mEvt) {
         String text = String.format(template, "Released", mEvt.getX(), mEvt.getY());
         textArea.append(text);
      }

      @Override
      public void mouseDragged(MouseEvent mEvt) {
         String text = String.format(template, "Dragged", mEvt.getX(), mEvt.getY());
         textArea.append(text);
      }
   }

   private static void createAndShowGui() {
      SimpleMouseListenerEg mainPanel = new SimpleMouseListenerEg();

      JFrame frame = new JFrame("SimpleMouseListenerEg");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}
  • 0
    В конечном счете, это будет частью приложения с графическим интерфейсом, я просто пытаюсь составить концепцию этого. Что касается перезаписи файла, это не так, я взял его из моей предыдущей программы, и он работает правильно.
  • 0
    @dvd: пожалуйста, смотрите редактировать, чтобы ответить.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню