JScrollPane get()返回错误的值?

时间:2011-09-21 13:13:26

标签: java swing jframe

我希望在ActionPerformed

上方的Button上方放置一个小Jframe

我直接尝试获取添加了按钮的JScrollPane的X(getX())和Y(getY())坐标,但它似乎总是返回错误的协调坐标

jScrollPane1.getLocation()

返回的值
java.awt.Point[x=10,y=170]

以上值与我将JScrollPane放置在屏幕上的位置无关。

如果我删除JScrollPane并直接尝试获取Jpanels坐标,这是有效的。

3 个答案:

答案 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);
}