JScrollPane getX () возвращает неправильное значение? - PullRequest
1 голос
/ 21 сентября 2011

Я хочу поместить маленький Jframe прямо над кнопкой, на ActionPerformed

Я непосредственно пытался получить координаты X (getX ()) и Y (getY ()) JScrollPane, в которомкнопка добавлена, но всегда кажется, что она возвращает неправильные координаты

значения, возвращаемые jScrollPane1.getLocation ()

java.awt.Point[x=10,y=170]

Приведенные выше значения не зависят от того, где я размещаю JScrollPaneна экране.

Это работает, если я удаляю JScrollPane и напрямую пытаюсь получить координаты Jpanels !!

Ответы [ 3 ]

4 голосов
/ 21 сентября 2011

например

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);
        }
    }
}
2 голосов
/ 21 сентября 2011

Этот приятный метод поможет вам:

// 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();
1 голос
/ 21 сентября 2011

Поскольку вы хотите создать новый кадр прямо над данным компонентом, вы хотите получить экранные координаты вашего компонента.

Для этого вам необходимо использовать метод 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...