我正在尝试更新变量' dest'按下鼠标位置。 但每当检查值是否已更新(在运行方法中)时,我发现它还没有。我哪里错了?
public class Boid extends JPanel implements Runnable{
private Vector2D dest = new Vector2D(300,300);
public Boid ()
addMouseListener (new MouseAdapter() {
public void mousePressed (MouseEvent e) {
Boid.this.dest = new Vector2D(e.getX(), e.getY());
System.out.println("mouse "+Boid.this.squareX);
}
});
}
public void run(){
System.out.println(dest);
}
public void drawBoid(Graphics g) {
g.setColor(Color.red);
g.drawLine((int)pos.getX(), (int)pos.getY(), (int)dest.getX(), (int)dest.getY());
}
}
(编辑)的 我用以下方式调用run方法。不确定这是正确的方法,我从处理中走出来,所以这就是我认为它可能有用的方式......
public class GUI{
private static Boid b = new Boid();
private static Timer TT;
public static void main(String[] args) {
JFrame mainFrame = new JFrame("Boid GUI");
mainFrame.setLocationRelativeTo(null);
mainFrame.setResizable(false);
mainFrame.setSize(640,480);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPanel = new JPanel();
contentPanel.setPreferredSize(new Dimension(640,480));
contentPanel.setBackground(Color.BLACK);
mainFrame.add(contentPanel);
mainFrame.setVisible(true);
ActionListener updateDrawing = new ActionListener() {
public void actionPerformed(ActionEvent e) {
b.run();
b.drawBoid(contentPanel.getGraphics());
}
};
TT = new Timer(50, updateDrawing);
TT.start();
}
}
也尝试了以下主要内容,但似乎只有boid.run方法才能运行'一旦:
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame mainFrame = new JFrame("Boid GUI");
mainFrame.setLocationRelativeTo(null);
mainFrame.setResizable(false);
mainFrame.setSize(640,480);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPanel = new JPanel();
contentPanel.setPreferredSize(new Dimension(640,480));
contentPanel.setBackground(Color.BLACK);
mainFrame.add(contentPanel);
setWindow(mainFrame);
mainFrame.setVisible(true);
b.run();
}
});
}
答案 0 :(得分:0)
您的整个设计不正确。这不是你自定义绘画的方式。
我正在尝试更新变量' dest'按下鼠标位置
一些绘画基础知识:
paintComponent(...)
方法才能进行绘画。setMouseLocation(x, y)
这样的方法来允许您更改这些变量。setMouseLocation(...)
方法,然后在面板上调用repaint()
。查看Custom Painting上Swing教程中的部分,了解更多信息和工作示例。
答案 1 :(得分:0)
将变量声明为“公共静态”将使其可以从项目的任何位置访问。