我比初学者对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