2017-01-15 2 views
0

Я новичок в разработке java и решил создать простой Java-проект, который выводит координаты X и Y, где мышь находится внутри jframe. Я не знаю, как использовать слушателя.Постоянно обновляемый текст JFrame

package main; 

import java.awt.BorderLayout; 
import java.awt.MouseInfo; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.SwingConstants; 

public class Main { 
public static void main(String[] args) { 
jFrame(); 
} 

public static void jFrame() { 
    JFrame myFrame = new JFrame("Screen Location"); 
    myFrame.setVisible(true); 
    myFrame.setBounds(0, 0, 300, 100); 
    JLabel myText = new JLabel(""+ getTotal(), 
     SwingConstants.CENTER); 
    myFrame.getContentPane().add(myText, BorderLayout.CENTER); 
} 

private static String getTotal() { 
    for (int i = 0; i < 1;) { 
    int publicScreenValueX = MouseInfo.getPointerInfo().getLocation().x; 
    int publicScreenValueY = MouseInfo.getPointerInfo().getLocation().y; 
    String total = new String(publicScreenValueX + ", " + publicScreenValueY); 
    return total; 
    } 
return null; 
    } 
} 

Как я могу сделать проект постоянным обновлением координат? Может ли кто-нибудь дать ссылку на то, как это сделать?

Помните, что это без использования кнопки или без ввода от пользователя, кроме перемещения мыши.

Вот образ того, что это будет выглядеть так:

Image of current program

За исключением координат всегда будет обновление.

+1

Вам нужно будет использовать 'интерфейс MouseMotionListener' – Yousaf

ответ

0

В основном все, что вам нужно сделать для того, чтобы создать JFrame, который обрабатывает события мыши является:

1 - Создайте класс, который расширяет JFrame и реализует MouseListener

2 - @Override mouseClicked, mouseEntered, mouseExited , mousePressed, mouseReleased для отслеживания событий, соответствующих событиям. Теперь каждый раз, когда происходит одно из этих событий, соответствующая функция запускается. Используйте MouseEvent.getX(), MouseEvent.getY(), чтобы получить координаты окна, в котором происходит событие мыши.

import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 

import javax.swing.JFrame; 

public class CreateJFrameWindowWithMouseEventHandling extends JFrame implements MouseListener { 

    private static final long serialVersionUID = 1L; 

    public CreateJFrameWindowWithMouseEventHandling() { 
     setTitle("Simple Frame"); 
     addMouseListener(this); 
    } 

    @Override 
    public void mouseClicked(MouseEvent e) { 
     int x = e.getX(); 
     int y = e.getY(); 
     JOptionPane.showMessageDialog(null, "Mouse Clicked at X: " + String.valueOf(x) + " - Y: " + String.valueOf(y)); 
    } 

    @Override 
    public void mouseEntered(MouseEvent e) { 
     int x = e.getX(); 
     int y = e.getY(); 
     System.out.println("Mouse Entered frame at X: " + x + " - Y: " + y); 
    } 

    @Override 
    public void mouseExited(MouseEvent e) { 
     int x = e.getX(); 
     int y = e.getY(); 
     System.out.println("Mouse Exited frame at X: " + x + " - Y: " + y); 
    } 

    @Override 
    public void mousePressed(MouseEvent e) { 
     int x = e.getX(); 
     int y = e.getY(); 
     System.out.println("Mouse Pressed at X: " + x + " - Y: " + y); 
    } 

    @Override 
    public void mouseReleased(MouseEvent e) { 
     int x = e.getX(); 
     int y = e.getY(); 
     System.out.println("Mouse Released at X: " + x + " - Y: " + y); 
    } 

    private static void createAndShowGUI() { 

    //Create and set up the window. 

    JFrame frame = new CreateJFrameWindowWithMouseEventHandling(); 

    //Display the window. 

    frame.setVisible(true); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 

    public static void main(String[] args) { 

    //Schedule a job for the event-dispatching thread: 

    //creating and showing this application's GUI. 

    javax.swing.SwingUtilities.invokeLater(new Runnable() { 

public void run() { 

    createAndShowGUI(); 

} 

    }); 
    } 

} 
0

Я бы посоветовал на создание нового класса, который наследует от JFrame и все это, потому что это путь более объектно-ориентированный дружественный. Однако, с вашим кодом, вам нужно добавить MouseMotionListener в ваш JFrame, реализовать все абстрактные методы и, по методу mouseMoved, сменить ваш myText Текст ярлыка; Замените метод, приведенный ниже, на тот, который у вас есть, и он должен работать. Обратите внимание, что java.awt.event.MouseMotionListener будет предоставлять вам информацию о перемещении мыши внутри окна вашего приложения. Для событий, которые происходят за пределами этого окна, вы можете проверить это другой вопрос: Java mouse motion anywhere on screen

public static void jFrame() { 
    JFrame myFrame = new JFrame("Screen Location"); 
    myFrame.setLocationRelativeTo(null); 
    myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // makes the application close when you close the JFrame 
    myFrame.setVisible(true); 
    myFrame.setBounds(0, 0, 300, 100); 
    JLabel myText = new JLabel(""+ getTotal(), SwingConstants.CENTER); 
    myFrame.getContentPane().add(myText, BorderLayout.CENTER); 
    myFrame.addMouseMotionListener(new MouseMotionListener(){ 
     @Override 
     public void mouseDragged(MouseEvent e) { 
      // don't delete this method 
      // all abstract methods must be overridden 
     } 

     @Override 
     public void mouseMoved(MouseEvent e) { 
      myText.setText(getTotal()); 
     } 
    }); 

} 
Смежные вопросы