Java Swing: диалог позиционирования поверх существующего окна
может ли кто-нибудь показать простой Java Swing code/web resource, который разместит всплывающее диалоговое окно, выровненное по центру поверх существующего окна JFrame, когда кнопка JFrame нажата?
4 ответов
О..это довольно просто:
скажем, у вас есть JFrame, который содержит JDialog, и вы хотите, чтобы JDialog (при открытии) был прямо поверх JFrame.
поэтому в конструкторе JDialog у вас должно быть что-то вроде:
public class MyDialog extends JDialog
public MyDialog(JFrame parent)
{
super.setLocationRelativeTo(parent); // this will do the job
}
другими словами, Передайте указатель JFrame в свой диалог и вызовите setLocationRelativeTo(...); метод.
о каком всплывающем диалоге вы говорите? Если вы используете JOptionPane или что-то подобное, установите его родительский компонент в JFrame, и он автоматически центрируется поверх окна JFrame.
JOptionPane.showMessageDialog(frame, "Hello, World!");
Если вы создаете свой собственный JDialog, вы можете получить позицию JFrame с помощью JFrame.getLocation () и его размер с помощью JFrame.getsize не(). Математика оттуда довольно проста; просто вычислите центр JFrame и вычитайте половину ширины / высоты из JDialog, чтобы получить верхний левый угол вашего диалога.
Если ваш JDialog еще не был отображен, JFrame.getSize () может дать вам нулевой размер. В этом случае, вы можете использовать JDialog.getPreferredSize (), чтобы узнать, насколько он будет большим после его отображения на экране.
Если вы хотите модальный и центрированный диалог в окне ...
в конструкторе диалогового окна:
class CustomDialog extends JDialog {
public CustomDialog(Frame owner, String title, boolean modal) {
super(owner, title, modal);
setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
...
setSize(150, 100);
setLocationRelativeTo(owner);
}
}
для отображения диалогового окна (с помощью кнопки, и т. д.):
public void actionPerformed(ActionEvent e) {
dialog.setVisible(true);
}