私はJavaの初心者レベルの理解よりも少し良くなっており、学生の割り当てに問題があります。私はクラス(student.java)を "ボタンにする"必要がありました - これは私が行ったことです(JButtonの新しいインスタンスを作成する代わりに、私のコードは "student"の新しいインスタンスを作成します)。ユーザーがマウスをクリックした場所にボタンを移動させる必要があります。私はそれをうまくやったので、私の割り当て要件が満たされました。
しかし、以前の位置から新しい位置に突然ジャンプするのではなく、ボタンをマウスクリックの位置にスムーズに移動させたいと思います。以下は私のコードです。 mouseClicked()メソッドの中の数学は私が試したものですが、ボタンのモーションには何の影響もありません。JButtonコンポーネントをスムーズにJavaのマウスクリック位置に移動
- ヌルレイアウトが必要とされる
- ボタンは、クラスの生徒のインスタンス
任意のヒントでなければならないのMouseListener(ないのActionListener)
public myJPanel(){
super();
setLayout(null);
setBackground(Color.decode("#F5F2EB"));
setVisible(true);
setPreferredSize(new Dimension(640,480));
setMinimumSize(new Dimension(640,480));
setMaximumSize(new Dimension(640,480));
Font f = new Font("Copperplate Gothic Bold", Font.BOLD, 16);
student btn = new student("First","Last", num, "");
add(btn);
btn.setBounds(100, 150, 400, 90);
btn.setText(btn.getInfo());
btn.setBackground(Color.decode("#89A690"));
btn.setForeground(Color.decode("#F5F2EB"));
btn.setOpaque(true);
btn.setFont(f);
btn.setBorder(BorderFactory.createEmptyBorder(20, 40, 20, 40));
// move btn object
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int x = e.getX(); //mouse click x position
int y = e.getY(); //mouse click y position
int px = btn.getX() - x; //previous btn x position(to get distance between old/new position)
int py = btn.getY() - y; //previous btn y position(to get distance between old/new position)
double speed = 5; //speed
double ang = (float)Math.atan2(py, px) * 180/Math.PI; //angle
x += Math.cos(ang * Math.PI/180) * speed; //move to x
y += Math.sin(ang * Math.PI/180) * speed; //move to y
btn.setLocation(x,y); //relocate button to new location
}});
...、Math.toDegrees()とMath.toRadians()の使用を注意してくださいあなたの「生徒」ボタンはどんな感じですか? – MadProgrammer
通常のJButtonのようです。 student.javaはJButtonを拡張します。したがって、studentの新しいインスタンスを作成すると、上記のコードでbtnディメンションが指定されています(btn.setBounds) – Tiff