我希望在ActionPerformed
上方的Button上方放置一个小Jframe我直接尝试获取添加了按钮的JScrollPane的X(getX())和Y(getY())坐标,但它似乎总是返回错误的协调坐标
jScrollPane1.getLocation()
返回的值java.awt.Point[x=10,y=170]
以上值与我将JScrollPane放置在屏幕上的位置无关。
如果我删除JScrollPane并直接尝试获取Jpanels坐标,这是有效的。
答案 0 :(得分:4)
例如
private void showDialog() {
if (canShow) {
location = myButton.getLocationOnScreen();
int x = location.x;
int y = location.y;
dialog.setLocation(x - 466, y - 514);
if (!(dialog.isVisible())) {
Runnable doRun = new Runnable() {
@Override
public void run() {
dialog.setVisible(true);
//setFocusButton();
//another method that moving Focus to the desired JComponent
}
};
SwingUtilities.invokeLater(doRun);
}
}
}
答案 1 :(得分:2)
这个不错的方法可以帮到你:
// Convert a coordinate relative to a component's bounds to screen coordinates
Point pt = new Point(component.getLocation());
SwingUtilities.convertPointToScreen(pt, component);
// pt is now the absolute screen coordinate of the component
添加:我没有意识到,但是像 mKorbel 写的那样,你可以简单地调用
Point pt = component.getLocationOnScreen();
答案 2 :(得分:1)
由于您想在给定组件的正上方生成一个新帧,因此您需要获取组件的屏幕坐标。
为此,您需要使用组件的getLocationOnScreen()
方法。
以下是一段有用的代码段:
public void showFrameAboveCmp(Frame frame, Component cmp) {
Dimension size = cmp.getSize();
Point loc = cmp.getLocationOnScreen();
Dimension frameSize = frame.getSize();
loc.x += (size.width - frameSize.width)/2;
loc.y += (size.height - frameSize.height)/2;
frame.setBounds(loc.x, loc.y, frameSize.width, frameSize.height);
frame.setVisible(true);
}