возможно, вам не следует создавать new Color(0.0f, 0.25f, 1.0f)
на каждом перерисовке.
Для меня производительность тихая и приятная.
public class Example {
static public void main( String[] s ) {
EventQueue.invokeLater( new Runnable() {
public void run() {
JFrame frame = new JFrame();
frame.setBounds( 50, 50, 600, 600 );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setGlassPane( new JComponent() {
{
MouseInputAdapter mia = new MouseInputAdapter(){
public void mouseDragged(MouseEvent me) {
setPos(me.getX(), me.getY());
}
public void mousePressed(MouseEvent me) {
setShow(true);
setPos(me.getX(), me.getY());
}
public void mouseReleased(MouseEvent me){
setShow(false);
setVisible(false);
}
};
addMouseListener(mia);
addMouseMotionListener(mia);
setOpaque(false);
}
private int x=0, y=0, k=25,z=1;
private boolean showDot;
public void setShow(boolean b){ this.showDot = b; }
private Color color = new Color(0.0f, 0.25f, 1.0f);
public void paintComponent(Graphics g) {
if (showDot) {
g.setColor(color);
g.fillOval(x - k, y - k, 2*k, 2*k);
}
}
public void setPos(int x, int y) {
int tmpX = this.x, tmpY = this.y;
this.x = x; this.y = y;
repaint(tmpX - k , tmpY-k, 2*k+5, 2*k+5);
repaint(this.x-k, this.y-k, 2*k+5, 2*k+5);
}
} );
frame.getGlassPane().setVisible( true );
frame.setVisible( true );
}
});
}
}