简体   繁体   English

无法使用MouseListener的输入

[英]Can't use the input from the MouseListener

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class Viewer implements MouseListener
{
  static int counter = 0;
  static double x1, x2, x3, y1, y2, y3;
  public static void main (String [] args)
  {
    JFrame outerFrame = new JFrame();
    JPanel panel = new JPanel();

    panel.setSize(400,400);
    outerFrame.setSize(400, 400);
    outerFrame.setTitle("Drawing Triangle");
    outerFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    outerFrame.add(panel);
    panel.addMouseListener(new MouseAdapter(){

      @Override
      public void mousePressed(MouseEvent e){
        if(counter == 0) {
          x1 = e.getX();
          y1 = e.getY();

        } else if(counter == 1) {
          x2 = e.getX();
          y2 = e.getY();

        } else if(counter == 2) {
          x3 = e.getX();
          y3 = e.getY();

        }

        counter++;
      }

    });
    System.out.println(x2);
    System.out.println(y2);
    System.out.println(x1);
    System.out.println(y1);    
    System.out.println(x3);
    System.out.println(y3);

    TriangleComponent component = new TriangleComponent(x1, x2, x3, y1, y2, y3);

    outerFrame.add(component);
    outerFrame.setVisible(true);

  }
}

I am trying to use users mouse input to make them draw a triangle. 我正在尝试使用用户的鼠标输入来使他们绘制一个三角形。 I also have a trianglecomponent class as well as a constructor that uses the xs and ys here.So I used the println's at the end and saw that code runs before xs and ys. 我也有一个三角形组件类以及一个在这里使用xs和ys的构造函数,所以我在最后使用了println,看到代码在xs和ys之前运行。 How can I change this to get the xs and ys from the mouse before drawing anything 在绘制任何内容之前,如何更改此设置以从鼠标获取xs和ys

您需要使绘图成为事件处理的一部分,因此将侦听器之后的所有内容移到侦听器中,以便在您单击第三次单击后立即绘制三角形。

In your code you are creating the TriangleComponent before knowing where to draw it (x1, x2, y1, ecc...). 在您的代码中,您正在创建TriangleComponent然后才知道在何处绘制(x1,x2,y1,ecc ...)。

To solve this, simply create the TriangleComponent after you have all the coordinates (after the third click): 要解决此问题,只需在获得所有坐标之后(在第三次单击之后)创建TriangleComponent即可:

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class Viewer implements MouseListener
{
  static int counter = 0;
  static double x1, x2, x3, y1, y2, y3;
  public static void main (String [] args)
  {
    final JFrame outerFrame = new JFrame();
    JPanel panel = new JPanel();

    panel.setSize(400,400);
    outerFrame.setSize(400, 400);
    outerFrame.setTitle("Drawing Triangle");
    outerFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    outerFrame.add(panel);
    panel.addMouseListener(new MouseAdapter(){

      @Override
      public void mousePressed(MouseEvent e){
        if(counter == 0) {
          x1 = e.getX();
          y1 = e.getY();

        } else if(counter == 1) {
          x2 = e.getX();
          y2 = e.getY();

        } else if(counter == 2) {
          x3 = e.getX();
          y3 = e.getY();

          TriangleComponent component = new TriangleComponent(x1, x2, x3, y1, y2, y3);

          outerFrame.add(component);

          System.out.println(x2);
          System.out.println(y2);
          System.out.println(x1);
          System.out.println(y1);    
          System.out.println(x3);
          System.out.println(y3);
        }

        counter++;
      }

    });

    panel.setFocusable(true);

    outerFrame.setVisible(true);
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM