У меня есть JDialog, который открывается нажатием кнопки в JFrame. Каждый раз, когда я закрываю JDialog и снова нажимаю и открываю JDialog, он перемещается вверх по экрану (около 30 пикселей). Я попытался исправить местоположение кадра, использовал setLocationRelativeTo (null), а также попытался исправить это с помощью Toolkit.getDefaultToolkit (). GetScreenSize (); но это не работает. Он просто идет вверх, пока не окажется наверху экрана. Почему это могло быть?
// Play Hook Frame
hookDialog = new JDialog(frame, "Play Hook", true);
hookDialog.setSize(450, 250);
hookDialog.setLocation(dim.width / 2 - hookDialog.getSize().width / 2,
dim.height / 2 - hookDialog.getSize().height / 2);
hookDialog.getContentPane().setBackground(bgColor);
hookDialog.setResizable(false);
hookDialog.getContentPane().setLayout(null);
...
JButton btnPlayHook = new JButton("Play Hook");
customizeButton(btnPlayHook);
btnPlayHook.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (!isHookPressed) {
JOptionPane.showMessageDialog(frame,
"Please press Find Hook button first", "Error",
JOptionPane.ERROR_MESSAGE);
} else {
for (int i = 0; i < hooks.size(); i++) {
int intMin1 = (int) (hooks.get(i).getStartTime() / 60);
int intMin2 = (int) (hooks.get(i).getEndTime() / 60);
int intSec1 = (int) (hooks.get(i).getStartTime() % 60);
int intSec2 = (int) (hooks.get(i).getEndTime() % 60);
String min1 = intMin1 + " min";
String min2 = intMin2 + " min";
String sec1 = intSec1 + " sec";
String sec2 = intSec2 + " sec";
String elem = "Hook" + (i + 1) + ": " + min1 + " "
+ sec1 + " - " + min2 + " " + sec2;
if (!listElements.contains(elem))
listElements.addElement(elem);
}
hookDialog.setVisible(true);
}
}
});
hookDialog.setSize(450, 250);
должно бытьhookDialog.pack();
после добавления компонентов. - person Andrew Thompson   schedule 26.10.2014hookDialog.getContentPane().setLayout(null);
Графические интерфейсы пользователя Java должны работать с разными ОС, размером экрана, разрешением экрана и т. Д. Как таковые, они не способствуют созданию идеальной компоновки пикселей. Вместо этого используйте менеджеры компоновки или их комбинации вместе с отступом макета и границами для пробел. - person Andrew Thompson   schedule 26.10.2014hookDialog.setLocation(dim.width / 2 - hookDialog.getSize().width / 2, dim.height / 2 - hookDialog.getSize().height / 2);
.. вместо этого ..hookDialog.setLocationRelativeTo(null);
- person Andrew Thompson   schedule 26.10.2014