繁体   English   中英

在Jframe中移动对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM