как центрировать JOptionPane в соответствии с его JFrame? [Дубликат]

(я понимаю, что это старо, но оно все еще появляется ...)

Если вы замените mysql_* на mysqli_*, имейте в виду, что вся загрузка функций mysqli_* необходимо передать ссылку на базу данных.

Например:

mysql_query($query)

становится

mysqli_query($link, $query)

Т.е. требуется большая проверка.

26
задан Andrew Thompson 5 May 2013 в 15:03
поделиться

5 ответов

setLocationRelativeTo ..this устанавливает верхний левый пиксел всплывающего окна по центральному пикселю родителя. ..

Нет, это не так!

Centered Dialog [/g1]

Каждый из 3-х диалогов, выложенных этим простым примером, появляется насколько я могу видеть. Я могу только догадываться, что код вызывает setLocationRelativeTo в неподходящее время.

import javax.swing.*;

class CenterTheDialog {

    CenterTheDialog() {
        for (int ii=1; ii<4; ii++) {
            JFrame f = new JFrame("Frame " + ii);
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

            f.setSize(400,300);
            f.setLocationByPlatform(true);
            f.setVisible(true);

            JDialog d = new JDialog(f);
            d.setSize(300,200);
            d.setLocationRelativeTo(f);
            d.setVisible(true);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new CenterTheDialog();
        });
    }
}
45
ответ дан Andrew Thompson 1 September 2018 в 10:51
поделиться

[д0] Window#setLocationRelativeTo

5
ответ дан Jeffrey 1 September 2018 в 10:51
поделиться

На созданном JDialog вы должны сначала вызвать pack(), затем setLocationRelativeTo(parentFrame), а затем setVisible(true). С этим порядком JDialog должен располагаться в центре на родительском фрейме.

Если вы сначала не вызываете pack(), тогда установка местоположения относительно родителя не работает должным образом, потому что JDialog не знает, какой размер в данный момент. Похоже, что размер равен 0 на 0, что приводит к «верхнему левому пикселю всплывающего окна по центральному пикселю родительского» позиционирования, упомянутому в комментарии к одному из других ответов.

48
ответ дан MB. 1 September 2018 в 10:51
поделиться

Вы можете попробовать передать координаты родительского окна и его размер в новое окно и добавить координаты + 1/2 размера родительского кадра в каждой оси - 1/2 всплывающих окон x / y для центра по центру.

Или .. Если вы расширяете, вы можете использовать setLocationRelativeTo (owner)

Надеюсь, это поможет

2
ответ дан Phil 1 September 2018 в 10:51
поделиться

Вы можете использовать событие e для получения родительского окна. Используйте getWindowAncestor и e.getSource().

dialog.setLocationRelativeTo(SwingUtilities.getWindowAncestor((Component) e.getSource()))

3
ответ дан sixtytrees 1 September 2018 в 10:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: