2

我将如何使标签(图片)“可拖动”。所以,基本上是为了让我可以点击 jlabel 图片,然后在 jframe 周围移动它并放下它。我四处寻找,但对我没有帮助,所以我想知道你们中是否有人知道如何使它工作?

package src;

import java.awt.Dimension;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

/*
 * @Author - 0x29A
 * 
 * 
 */
public class Jframe {

    public static void main(final String args[]) {
        /*
         * @Images
         */
        final ImageIcon icon = new ImageIcon("Data/button.png");
        final JLabel label = new JLabel(icon);

        final ImageIcon icon1 = new ImageIcon("Data/button1.png");
        final JLabel label1 = new JLabel(icon1);

        final ImageIcon icon2 = new ImageIcon("Data/button2.png");
        final JLabel label2 = new JLabel(icon2);

        final ImageIcon icon3 = new ImageIcon("Data/button3.png");
        final JLabel label3 = new JLabel(icon3);

        final ImageIcon icon4 = new ImageIcon("Data/button4.png");
        final JLabel label4 = new JLabel(icon4);

        final ImageIcon icon5 = new ImageIcon("Data/button5.png");
        final JLabel label5 = new JLabel(icon5);

        final ImageIcon icon6 = new ImageIcon("Data/background.png");
        final JLabel label6 = new JLabel(icon6);

        /*
         * @Image Location
         */
        label.setBounds(282, 255, 96, 96);
        label1.setBounds(384, 255, 96, 96);
        label2.setBounds(282, 153, 96, 96);
        label3.setBounds(384, 153, 198, 96);
        label4.setBounds(181, 152, 96, 96);
        label5.setBounds(181, 255, 96, 96);
        label6.setBounds(0, 0, 765, 503);

        /*
         * @Frame
         */
        final JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(765, 503));
        frame.setLayout(null);
        frame.add(label);
        frame.add(label1);
        frame.add(label2);
        frame.add(label3);
        frame.add(label4);
        frame.add(label5);
        frame.add(label6);
        frame.pack();
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
4

1 回答 1

1

它归结为许多要求。主要的“谁负责管理”。您可以实现它,以便每个标签负责它自己的布局管理或容器负责。

各有各的优点。我更喜欢容器管理的方法,因为它不会将您锁定在只能使用标签的范围内。

您需要熟悉MouseMotionListenerMouseListener

基本思想是监视何时发生单击(以及单击了什么)并使用单击点确定拖动鼠标时的偏移量。

更新

抱歉,我花了一些时间才找到,但我回答了一个可能有用的问题Object on Image does not move when Image move

它并不完全相同,但它包含可能有帮助的概念。

于 2012-07-23T23:44:00.397 回答