

swingを用いて画面を生成した後、マウスイベント処理を用いてマウスにより押された座標を表示させる。そのためにMouseListenerインターフェースとaddMouseListener()を用いて実現することができるというところまでは理解したけれどもその先がチュートリアル等を参照しても進むことができないです。

[code]

    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.lang.*;
    /*
    画面を生成し、画面内でマウスが押されたらその座標が表示されるプログラム
    */
    public class Mevent extends JFrame implements MouseListener{
    
        int x=0;
        int y=0;//マウス座標記録用変数
        public static void main(String[] args) {
            SwingUtilities.invokeLater(() -> {
                createAndShowGUI();
                Mevent m =new Mevent();
            });
        }
    
        private static void createAndShowGUI() {
            JFrame frame = new JFrame("window");
            frame.setSize(300,300);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    
        public Mevent(){
            addMouseListener(this);
        }
    
        @Override
        public void mouseClicked(MouseEvent e){
            Point point =e.getPoint();
            x=point.x;
            y=point.y;
            System.out.println("x:"+x+"y:"+y);
        }
    
        @Override
        public void mouseExited(MouseEvent e){}
        @Override
        public void mouseEntered(MouseEvent e){}
        @Override
        public void mousePressed(MouseEvent e){}
        @Override
        public void mouseReleased(MouseEvent e){}
    }
    
[/code]


CC BY-SA 4.0
2020-02-13T14:55:31.213
63025
2020-02-14T05:16:24.803
37816
question
java
画面内でマウスにより押された座標を表示するには


寝て起きて数時間考えたら自己解決いたしました。以下、ソースコード

[code]

    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.lang.*;
    /*
    画面を生成し、画面内でマウスが押されたらその座標が表示されるプログラム
    */
    public class Mevent extends JFrame implements MouseListener{
    
        int x=0;
        int y=0;//マウス座標記録用変数
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(() -> {
                Mevent m =new Mevent();
                JFrame frame = new JFrame("window");
                frame.setSize(300,300);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
                frame.addMouseListener(m);
            });
        }
    
        @Override
        public void mouseClicked(MouseEvent e){
            Point point =e.getPoint();
            x=point.x;
            y=point.y;
            System.out.println("x:"+x+"y:"+y);
        }
    
        @Override
        public void mouseExited(MouseEvent e){}
        @Override
        public void mouseEntered(MouseEvent e){}
        @Override
        public void mousePressed(MouseEvent e){}
        @Override
        public void mouseReleased(MouseEvent e){}
    }
    
[/code]


CC BY-SA 4.0
2020-02-14T00:36:30.420
63030
2020-02-14T00:36:30.420
37816
63025
answer


動いているので特に問題はないのですが少し修正すると以下のようになります。  
元コードでは Mevent が JFrame を継承しているため別途 JFrame のインスタンスを作成する必要がありません。Mevent 自身が
JFrame の機能をすべて持っているので以下のようにすればウィンドウが表示されます。

[code]

    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.lang.*;
    /*
    * 画面を生成し、画面内でマウスが押されたらその座標が表示されるプログラム
    * */
    public class Mevent extends JFrame implements MouseListener{
    
      int x=0;
      int y=0;//マウス座標記録用変数
    
      public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
          Mevent frame = new Mevent();
          frame.setVisible(true);
        });
      }
    
      public Mevent(){
        super("window");
        setSize(300,300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        addMouseListener(this);
      }
    
      @Override
      public void mouseClicked(MouseEvent e){
        Point point =e.getPoint();
        x=point.x;
        y=point.y;
        System.out.println("x:"+x+", y:"+y);
      }
    
      @Override
      public void mouseExited(MouseEvent e){}
      @Override
      public void mouseEntered(MouseEvent e){}
      @Override
      public void mousePressed(MouseEvent e){}
      @Override
      public void mouseReleased(MouseEvent e){}
    }
    
[/code]

あるいは「JFrameの機能」と「マウスイベントを表示する機能」を独立させたいならば Mevent は JFrame を継承する必要がありません。


CC BY-SA 4.0
2020-02-14T05:16:24.803
63047
2020-02-14T05:16:24.803
27410
63025
answer