(я понимаю, что это старо, но оно все еще появляется ...)
Если вы замените mysql_*
на mysqli_*
, имейте в виду, что вся загрузка функций mysqli_*
необходимо передать ссылку на базу данных.
Например:
mysql_query($query)
становится
mysqli_query($link, $query)
Т.е. требуется большая проверка.
blockquote>
setLocationRelativeTo
..this устанавливает верхний левый пиксел всплывающего окна по центральному пикселю родителя. ..Нет, это не так!
[/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(); }); } }
На созданном JDialog
вы должны сначала вызвать pack()
, затем setLocationRelativeTo(parentFrame)
, а затем setVisible(true)
. С этим порядком JDialog
должен располагаться в центре на родительском фрейме.
Если вы сначала не вызываете pack()
, тогда установка местоположения относительно родителя не работает должным образом, потому что JDialog
не знает, какой размер в данный момент. Похоже, что размер равен 0 на 0, что приводит к «верхнему левому пикселю всплывающего окна по центральному пикселю родительского» позиционирования, упомянутому в комментарии к одному из других ответов.
Вы можете попробовать передать координаты родительского окна и его размер в новое окно и добавить координаты + 1/2 размера родительского кадра в каждой оси - 1/2 всплывающих окон x / y для центра по центру.
Или .. Если вы расширяете, вы можете использовать setLocationRelativeTo (owner)
Надеюсь, это поможет
Вы можете использовать событие e
для получения родительского окна. Используйте getWindowAncestor
и e.getSource()
.
dialog.setLocationRelativeTo(SwingUtilities.getWindowAncestor((Component) e.getSource()))