Rob*_*n92 4 java swing point mouse-listeners swingutilities
我正在尝试获得与其父级相关的组件坐标.例如,当我有一个JFrame的大小500×500,其中有一个孩子- 的JPanel -在[50,10]我应该得到[50,10]结果.无论看起来多么简单,我一直都会遇到错误的坐标([0,0]或[ 3,24 ]).
这是我的JPanel代码:
class MyPanel extends JPanel implements MouseListener {
private Component parent;
private String strName;
public MyPanel(Component pr, String name, int w, int h) {
super();
parent = pr;
strName = new String(name);
this.setLayout(null);
this.setSize(w, h);
this.setBackground(Color.WHITE);
this.addMouseListener(this);
this.setVisible(true);
}
/* MouseListener implementation */
public void mouseClicked(MouseEvent event) {
int x = event.getX(); int y = event.getY();
Point pnt = new Point(SwingUtilities.convertPoint(this, new Point(0, 0), parent));
System.out.println(strName + ":" + pnt);
}
public void mouseEntered(MouseEvent event) { }
public void mouseExited(MouseEvent event) { }
public void mousePressed(MouseEvent event) { }
public void mouseReleased(MouseEvent event) { }
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
试试这个:
Point pnt = new Point(SwingUtilities.convertPoint(this, event.getPoint(), parent));
Run Code Online (Sandbox Code Playgroud)
isnatead of using(在提供的片段中至少没有使用BTW至少):
int x = event.getX();
int y = event.getY();
Run Code Online (Sandbox Code Playgroud)
你不应该这样做:
Point pnt = new Point(SwingUtilities.convertPoint(this, new Point(0,0), parent));
Run Code Online (Sandbox Code Playgroud)
否则返回的坐标将始终与(0,0)有关.
你也可以这样做(我认为你会忘记x和y:P):
int x = event.getX();
int y = event.getY();
Point pnt = new Point(SwingUtilities.convertPoint(this,
new Point(x,y), parent));
Run Code Online (Sandbox Code Playgroud)
编辑:
如果我明白你想要什么,那么为什么要烦恼所有的代码呢?在每个JPanelŝ MouseListener的mouseClicked()做到这一点:
public void mouseClicked(MouseEvent event) {
System.out.println(this.getX()+" "+this.getY());//print x and why co-ords for MyJpanel
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
882 次 |
| 最近记录: |