クリック アンド ドラッグで再配置できる 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();
}
}
});