[英]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.