【问题标题】:Java Swing - Why is this no longer draggable?Java Swing - 为什么这不再是可拖动的?
【发布时间】:2014-08-02 18:40:04
【问题描述】:

昨天我试图制作一个可拖动的、未装饰的 JPanel,它运行良好,然后今天我加载了该项目,但它不再工作(我不知道为什么会发生这种情况,因为我确实正确保存了所有内容)。

任何帮助将不胜感激:)

这是源代码:

import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class CustomBubble extends JFrame {

    public int xMouse;
    public int yMouse;

    JPanel pnl = new JPanel();

    public CustomBubble()
    {
        super("CustomBubble");
        setSize(150,100);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setUndecorated(true);
        setLocationByPlatform(true);
        setAlwaysOnTop(true);
        setVisible(true);

        pnl.addMouseMotionListener(
                new MouseAdapter()
                {
                    public void mouseDragged(MouseEvent e) {
                        int x = e.getXOnScreen();
                        int y = e.getYOnScreen();

                        setLocation(x - xMouse, y - yMouse);
                    }

                });
        pnl.addMouseListener(
                new MouseAdapter() {
                    public void mousePressed(MouseEvent me) {
                        xMouse = me.getX();
                        yMouse = me.getY();
                    }
                });

        add(pnl);
    }

    public static void main(String[] args)
    {
        CustomBubble gui = new CustomBubble();
    }
}

【问题讨论】:

  • 这是程序中的实际行吗?因为它不会编译:setDefaultCloseOperation(EXIT_ON_CLOSE);
  • 是的,就在里面。它为我编译。我唯一的问题是,当面板出现时,我无法再在屏幕上单击并拖动它。
  • 这可能无关紧要,但如果你把它改成JFrame.EXIT_ON_CLOSE呢?
  • 我将其更改为 JFrame.EXIT_ON_CLOSE 并没有任何区别。

标签: java swing user-interface jpanel listener


【解决方案1】:

我在我的电脑上测试了它并让它工作。通常setVisible(true); 语句应该是你做的最后一件事。因此,只需在 add(pnl); 调用之后将该语句向下移动,您应该会很好。

...
add(pal);
setVisible(true);
} // end of constructor

【讨论】:

    【解决方案2】:

    此代码运行良好。我已经在我的电脑上尝试过这段代码。没有给出任何错误。工作正常..

    package test;
    
    import javax.swing.*;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    
    /**
     *
     * @author ****
     */
    public class Test extends JFrame {
    
        public int xMouse;
        public int yMouse;
    
        JPanel pnl = new JPanel();
    
        public Test()
        {
            super("CustomBubble");
            setSize(150,100);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setUndecorated(true);
            setLocationByPlatform(true);
            setAlwaysOnTop(true);
            setVisible(true);
    
            pnl.addMouseMotionListener(
                    new MouseAdapter()
                    {
                        public void mouseDragged(MouseEvent e) {
                            int x = e.getXOnScreen();
                            int y = e.getYOnScreen();
    
                            setLocation(x - xMouse, y - yMouse);
                        }
    
                    });
            pnl.addMouseListener(
                    new MouseAdapter() {
                        public void mousePressed(MouseEvent me) {
                            xMouse = me.getX();
                            yMouse = me.getY();
                        }
                    });
    
            add(pnl);
        }
    
        public static void main(String[] args)
        {
            Test gui = new Test();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 2016-07-12
      相关资源
      最近更新 更多