我正在尝试创建一个程序,用户可以通过单击该行的起点,将鼠标拖动到终点并释放它来在GUI中绘制一条线。我不希望在拖动时在屏幕上显示该行,所以我使用的是MouseListener。
我创建了一个名为LineInner的独立类,它处理所有MouseListener函数并确定它按预期运行。
这是我的问题所在的类:
import javax.swing.*;
import java.awt.*;
public class NotMSPaint {
public static void main(String[] args) {
JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBounds(30, 30, 300, 300);
window.setVisible(true);
LineInner in =new LineInner();
window.addMouseListener(in);
while ( in .x1 == -1 || in.y1 == -1 || in.x2 == -1 || in.y2 == -1) {
//pauses program until the user clicks the window
}
int x1 = in.x1; //variable declarations
int y1 = in.y1;
int x2 = in.x2;
int y2 = in.y2;
System.out.println(x1 + " " + y1 + " " + x2 + " " + y2);
window.getContentPane().add(new JComponent() //problem spot
{
public void paint(Graphics g) {
System.out.println("paint");
g.drawLine(x1, y1, x2, y2);
}
});
}
}
如果我在标记为变量声明的部分I中将x1,y1,x2和y2设置为0或100之类的数字,则会按照预期在这些坐标处绘制线条。
当我从MouseListener(in.x1,in.y1等)中获取变量时,println语句显示坐标按预期分配给变量。当程序如上所示运行时,永远不会输入绘制方法,也不会绘制直线。
为什么在为变量赋值时运行,但在MouseListener为同一变量赋值时不运行?