這裏是代碼。當框架在屏幕上移動時,鼠標不保持它的位置
import java.awt.Color;
import java.awt.Graphics;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.Robot;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JPanel;
public class Paint extends JPanel implements MouseMotionListener, MouseListener {
public Paint() {
setBackground(Color.RED);
addMouseMotionListener(this);
addMouseListener(this);
}
private boolean clicked = false;
public void paintComponent (Graphics g) {
super.paintComponent(g);
PointerInfo a = MouseInfo.getPointerInfo();
Point b = a.getLocation();
int x = (int) b.getX() - 3;
int y = (int) b.getY() - 23;
if (clicked) {
g.drawLine(x, y-5000, x,y+5000);
g.drawLine(x+5000,y,x-5000,y);
g.setColor(Color.white);
}
g.drawLine(x, y-5000, x,y+5000);
g.drawLine(x+5000,y,x-5000,y);
g.setColor(Color.black);
// . . .
}
@Override
public void mouseDragged(MouseEvent e) {
repaint();
}
@Override
public void mouseMoved(MouseEvent e) {
repaint();
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
clicked = true;
repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
clicked = false;
repaint();
}
}
public class Frame extends JFrame {
public Frame() {
this.setSize(500,500);
this.setTitle("Test painting");
this.setResizable(false);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
Paint panel = new Paint();
this.add(panel);
this.setVisible(true);
}
public static void main (String[] args) {
new Frame();
}
}
當我運行程序時,它看起來像它工作正常,當應用程序在默認位置,但一旦我移動小程序,我想在屏幕上,該行不會維持目前的鼠標在屏幕上的位置。
有人可以告訴我我哪裏出了問題或如何解決這個問題?
呀感謝
myPoint
,這個工程。雖然它把我帶到一個空指針。有沒有什麼辦法可以設置臨時點,以便在加載程序時不會拋出空指針? \t private int x =(int)myPoint.getX(); – user 2013-04-04 00:32:03在你的'paintComponent'方法中,只需檢查'myPoint'是否爲'null',如果是的話,不要打擾繪畫任何東西。你可以初始化你想要的任何東西......'myPoint = new Point(0,0)'例如 – MadProgrammer 2013-04-04 00:35:02
哦,當然,謝謝。 – user 2013-04-04 00:36:23