Hi ich habe den unten aufgelisteten Code geschrieben.
In einem JFrame ist ein JPanel eingebettet. Dieses JPanel namens statePanel soll verschiebbar sein.
Der Benutzer drückt dabei mit der Maus auf das JPanel und kann es durch eine "Drag" Bewegung verschieben.
Problem: Das Panel folgt nicht exakt dem Mauszeiger. Sobald ich den Mauszeiger bewege, hinkt das JPanel enorm hinterher und ist recht sprunghaft. Vorallem liegt das JPanel auch nicht direkt unter dem Mauszeiger.
Was muss ich ich korrigieren, damit das JPanel immer direkt an der Postion ist wo der Mauszeiger sich befindet, sobald der Benutzer die Maustaste über dem JPanel gedrückt hält und die Maus bewegt?
In einem JFrame ist ein JPanel eingebettet. Dieses JPanel namens statePanel soll verschiebbar sein.
Der Benutzer drückt dabei mit der Maus auf das JPanel und kann es durch eine "Drag" Bewegung verschieben.
Problem: Das Panel folgt nicht exakt dem Mauszeiger. Sobald ich den Mauszeiger bewege, hinkt das JPanel enorm hinterher und ist recht sprunghaft. Vorallem liegt das JPanel auch nicht direkt unter dem Mauszeiger.
Was muss ich ich korrigieren, damit das JPanel immer direkt an der Postion ist wo der Mauszeiger sich befindet, sobald der Benutzer die Maustaste über dem JPanel gedrückt hält und die Maus bewegt?
Java:
public class Starter
{
public static void main(String[] args)
{
new GraphicAnimator();
}
}
Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GraphicAnimator extends JFrame
{
private Container contentPane;
private StatePanel statePanel;
public GraphicAnimator()
{
super();
setSize(700, 500);
setLayout(new FlowLayout());
contentPane = getContentPane();
statePanel = new StatePanel();
contentPane.add(statePanel);
setVisible(true);
}
}
Java:
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
public class StatePanel extends JPanel
{
public StatePanel()
{
setPreferredSize(new Dimension(200, 100));
setBackground(Color.CYAN);
setBorder(new LineBorder(Color.BLACK));
this.addMouseMotionListener(new StatePanelMouseMotionListener(this));
}
}
Java:
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
public class StatePanelMouseMotionListener implements MouseMotionListener
{
private StatePanel statePanel;
public StatePanelMouseMotionListener(StatePanel statePanel)
{
this.statePanel = statePanel;
}
@Override
public void mouseDragged(MouseEvent me)
{
statePanel.setLocation(me.getX(), me.getY());
}
@Override
public void mouseMoved(MouseEvent me) {}
}