我比初學者對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
}});
是什麼你的「學生」按鈕看起來像? – MadProgrammer
它看起來像一個普通的JButton。 student.java擴展了JButton。所以當你創建一個新的學生實例時,它有上面的代碼(btn.setBounds) – Tiff