单击并拖动后JWindow的坐标

时间:2015-12-28 00:56:35

标签: java jwindow

我有一个程序,我有JWindows,可以通过点击和拖动重新定位。仅供参考,它们是透明的,并带有蓝色边框。通过单击和拖动重新定位后,我想知道矩形(边框)左上角的坐标。当我单击gui中的一个按钮时,将调用captureComponent()以获取该框左上角的当前x和y坐标。我一直在尝试使用Point loc = this.getLocation();当我将它放在MousePressed之外时,我会在点击它之前得到坐标并将其拖动到其他地方。当我尝试将它放在MousePressed中以便它会给我更新的值时它会给我错误找不到符号:方法getLocation()。我该怎么做才能解决这个问题,以便它能给我更新的价值?

import javax.swing.*;
import java.awt.event.*;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Point;
import javax.swing.border.LineBorder;

//test
public class Box extends JWindow {

    JPanel p=new JPanel();    
    public Box()            
    {

        this.setAlwaysOnTop(true);  
        this.setBackground(new Color(0, 0, 0, 0));
        setContentPane(p);   
        setSize(50,25);
        //this.setLocation(50, 50);

        p.setBorder(new LineBorder(Color.blue));
        p.setLayout(new FlowLayout());
        p.setBackground(new Color(0, 0, 0, 0));
        p.addMouseListener(adapter);
        p.addMouseMotionListener(adapter);

    }

    MouseAdapter adapter= new MouseAdapter()
    {

      int x,y; 
      public void mousePressed(MouseEvent e)
      {   
          if(e.getButton()==MouseEvent.BUTTON1)
        {            
            x = e.getX();
            y = e.getY();            
        }          
      }

      public void mouseDragged(MouseEvent e)
      {
          if( (e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) != 0)
          {
            setLocation(e.getXOnScreen()-x,e.getYOnScreen()-y);
            Point loc = this.getLocation();

          }
      }             

    };


    public void captureComponent()  {


        System.out.println(loc);


    }

}

当按下按钮时,从另一个类调用captureComponent方法:

    btnSnap.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent event) {
    JButton clickedButton = (JButton) event.getSource();
    if (clickedButton == btnSnap) {

                    //new captureComponent();
                    //System.out.println("test");
                    Box capture = new Box();
                    capture.captureComponent(); 
    }                
}
    });

1 个答案:

答案 0 :(得分:1)

  它给了我错误找不到符号:方法getLocation()。

您的MouseListener不是组件,因此您不能使用该方法,除非您有对组件的引用。

一种方法是获取生成事件的组件的窗口:

Component component = e.getComponent();
Window window = SwingUtilities.windowForComponent( component );
Point location = window.getLocation();

编辑:

  

当我单击gui中的按钮时,将调用captureComponent()以获取框左上角的当前x和y坐标。

第一次错过了上述声明。你使你的代码太复杂了。如果您只想在单击按钮时知道窗口的位置,那么只需在getLocation()方法中调用captureComponent()方法即可。每次拖动窗口时都无需保存位置。