2017-01-15 7 views
0

私はJava開発の初心者で、マウスがjframeの内部にあるX座標とY座標を出力する単純なJavaプロジェクトを作成することにしました。私はリスナーをどのように使用するのか不明です。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

:そのウィンドウの外に発生したイベントでは、この他の質問をチェックしたい場合があります – Yousaf

答えて

0

は、基本的には、マウスイベントを処理したJFrameを作成するためにしなければならないすべては、次のとおりです。

1 - @OverrideのmouseClicked、のmouseEntered、のmouseExited - のMouseListener

2のJFrameを拡張し、実装するクラスを作成します。 、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は、アプリケーションウィンドウ内のマウスの動きについての情報を提供するだけであることに注意してください。あなたは `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()); 
     } 
    }); 

} 
関連する問題