[英]Moving objects in Jframe
我有一些想要移动的JButton,例如以下代码:
package javaapplication19;
import java.awt.*;
import java.awt.Container;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JFrame;
public class JavaApplication19 extends JFrame{
public static JButton button=new JButton("Button");//Button to move
public static int x;
public static int y;
public JavaApplication19(){
final Container C = getContentPane();
C.setLayout(null);
button.setBounds(100,100,100,100);
C.add(button);
//MouseListenerStart
button.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if(!e.isMetaDown()){
x = e.getX();
y = e.getY();
}
}
});
button.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
if(!e.isMetaDown()){
Point p = getLocation();
button.setLocation(p.x + e.getX() - x,
p.y + e.getY() - y);
}
}
});
//MouseListenerend
}
public static void main(String[] args) {
JavaApplication19 marco=new JavaApplication19 ();
marco.setSize(1000,700);
marco.setVisible(true);
marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}}
但是有两个问题。 第一个是JButton的移动速度比鼠标慢。 第二个是JButton拖动时似乎在JFrame中的两个位置之间跳转。
我该如何解决这些问题?
解决了。
在此代码中:
package javaapplication19;
import java.awt.*;
import java.awt.Container;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JFrame;
public class JavaApplication19 extends JFrame{
public static JButton button=new JButton("Button");//Button to move
public static int x;
public static int y;
public JavaApplication19(){
final Container C = getContentPane();
C.setLayout(null);
button.setBounds(100,100,100,100);
C.add(button);
//MouseListenerStart
button.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if(!e.isMetaDown()){
x = e.getX();
y = e.getY();
}
}
});
button.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
if(!e.isMetaDown()){
Point p = button.getLocation();\\I Simply had to put button.getLocation() instead of getLocation()
button.setLocation(p.x + e.getX() - x,
p.y + e.getY() - y);
}
}
});
//MouseListenerend
}
public static void main(String[] args) {
JavaApplication19 marco=new JavaApplication19 ();
marco.setSize(1000,700);
marco.setVisible(true);
marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
您应该尝试编写更多可用于任何组件的通用代码。 您在解决方案中发布的代码经过硬编码,因此仅适用于名为“ button”的变量。
有关允许您拖动任何组件的更通用的解决方案,请查看“ 移动Windows”中的“ Basic Dragging
部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.