Может ли кто-нибудь показать простой Java Swing-код/веб-ресурс, который позиционирует выпадающий центр контекстного меню поверх существующего окна JFrame при нажатии кнопки JFrame?Java Swing: диалог позиционирования поверх существующего окна
ответ
довольно просто Oh..it в:
Скажем, у вас есть 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.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);
}
Я не знал, что этот метод существует; очень удобно! – rob
Вау, это действительно помогло мне! Небольшая деталь, хотя ... она должна быть вызвана только ПОСЛЕ установки размера диалогового окна, или появится диалоговое окно с верхним левым углом, расположенным в центре родительского окна. – Nyerguds