2015-12-28 4 views
0

У меня есть программа, в которой у меня есть JWindows, который можно переместить нажатием и перетаскиванием. Просто для информации они прозрачны и имеют синюю границу. Я хотел бы знать координаты верхнего левого угла прямоугольника (границы) после того, как он был перемещен с помощью щелчка и перетаскивания. Когда я нажимаю кнопку в моем gui, вызов будет сделан для captureComponent(), чтобы получить текущую координату x и y в верхнем левом углу окна. Я пытаюсь сделать это с помощью Point loc = this.getLocation(); Когда я размещаю его вне MousePressed, я получаю координату перед ее щелчком и перетаскиванием в другое место. Когда я пытаюсь поместить его внутри MousePressed, чтобы он дал мне обновленные значения, он дает мне ошибку, не могу найти символ: методы getLocation(). Что я могу сделать, чтобы исправить эту проблему, чтобы она дала мне обновленное значение?координаты JWindow после нажатия и перетаскивания

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

это дает мне ошибку не может найти символ: методы getLocation().

Вы MouseListener не являетесь компонентом, поэтому вы не можете использовать этот метод, если у вас нет ссылки на компонент.

Одним из способов было бы получить окно для компонента, который генерировал событие:

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

Edit:

При нажатии кнопки в моем гуй вызов будет сделан на captureComponent(), чтобы получить текущую координату x и y в верхнем левом углу окна.

Пропущено вышеуказанное заявление в первый раз. Вы слишком усложняете свой код. Если вы просто хотите узнать местоположение окна при нажатии кнопки, вы просто вызываете метод getLocation() в свой метод captureComponent(). Нет необходимости сохранять местоположение при каждом перетаскивании окна.

+0

Я правильно понял, что поставил бы это вместо того места, где я поставил Point loc = this.getLocation(); ? Вероятно, основной вопрос, но как я могу распечатать местоположение? Когда я попробую это, я теперь получаю ошибку, не могу найти символ: местоположение переменной. Большое спасибо за вашу помощь – volican

+0

@volican, см. Править. – camickr

+0

Проблема в том, что он не дает мне обновленные координаты после того, как я нажимаю и перетаскиваю поле. Он просто дает то, что первоначально координат, прежде чем я щелкнул и потащил его куда угодно. В коде, который вы упомянули выше, как мне получить значения местоположения x и y за пределами мыши? Я довольно новый, ваша помощь очень ценится! – volican

 Смежные вопросы

  • Нет связанных вопросов^_^