Лучшая практика настройки местоположений JFrame

У меня есть (несколько философский) вопрос относительно Swing, или для программирования GUI в целом. Известны ли наилучшие практики в отношении того, где найти экземпляры JFrame используемые в приложении?

  1. Где должна располагаться первая и основная рама? Всегда в центре ( setLocationRelativeTo(null) )?
  2. Где должен находиться ребенок JFrame ? Относительно его родительского JFrame , в центре экрана, где бы мы ни хотели?

Я всегда предполагал, что в этом есть несколько лучших практик, вроде «GUI-библии», я ошибаюсь и должен ли я (вздохнуть) произвольно решить, что делать?

Вот пример, который включает в себя советы:

  1. Hovercraft Full Of Eels – установить местоположение по платформе .

  2. Aardvocate Akintayo Olu – сериализуйте местоположение.

Но добавляет 2 хитрости:

  1. Сериализуйте ширину и высоту.
  2. Если рамка максимизируется в момент закрытия, она восстанавливается до получения границ. (Я ненавижу приложения, которые сериализуют параметры, но не учитывают это. Пользователь сидит там, нажав кнопку «Максимизировать / Восстановить» и задаваясь вопросом, почему ничего не происходит! )

Комбинация в 4 балла обеспечивает лучший пользовательский интерфейс!

 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.Properties; import java.io.*; class RestoreMe { /** This will end up in the current directory A more sensible location is a sub-directory of user.home. (left as an exercise for the reader) */ public static final String fileName = "options.prop"; /** Store location & size of UI */ public static void storeOptions(Frame f) throws Exception { File file = new File(fileName); Properties p = new Properties(); // restore the frame from 'full screen' first! f.setExtendedState(Frame.NORMAL); Rectangle r = f.getBounds(); int x = (int)r.getX(); int y = (int)r.getY(); int w = (int)r.getWidth(); int h = (int)r.getHeight(); p.setProperty("x", "" + x); p.setProperty("y", "" + y); p.setProperty("w", "" + w); p.setProperty("h", "" + h); BufferedWriter br = new BufferedWriter(new FileWriter(file)); p.store(br, "Properties of the user frame"); } /** Restore location & size of UI */ public static void restoreOptions(Frame f) throws IOException { File file = new File(fileName); Properties p = new Properties(); BufferedReader br = new BufferedReader(new FileReader(file)); p.load(br); int x = Integer.parseInt(p.getProperty("x")); int y = Integer.parseInt(p.getProperty("y")); int w = Integer.parseInt(p.getProperty("w")); int h = Integer.parseInt(p.getProperty("h")); Rectangle r = new Rectangle(x,y,w,h); f.setBounds(r); } public static void main(String[] args) { final JFrame f = new JFrame("Good Location & Size"); f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); f.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent we) { try { storeOptions(f); } catch(Exception e) { e.printStackTrace(); } System.exit(0); } }); JTextArea ta = new JTextArea(20,50); f.add(ta); f.pack(); File optionsFile = new File(fileName); if (optionsFile.exists()) { try { restoreOptions(f); } catch(IOException ioe) { ioe.printStackTrace(); } } else { f.setLocationByPlatform(true); } f.setVisible(true); } } 

Я обычно позволяю платформе решать, позвонив:

 myJFrame.setLocationByPlatform(true); 

Это позволяет окну «отображаться по умолчанию для собственной системы окон». Дополнительные сведения об этом: API windows

То, что я всегда делаю, начинается в центре экрана для основного кадра или в центре родителя для дочерних кадров, я записываю это местоположение. Затем, когда пользователи перемещают кадры туда, где они хотят, я записываю новое местоположение, и когда следующее приложение запускается, я использую последнее место для размещения фрейма.

Не уверен, есть ли передовая практика, поскольку она очень субъективна.

Устанавливая его в центре и позволяя пользователям изменять его в том месте, которое им нравится, кажется идеальным.

Что касается детского кадра, в зависимости от его размера, в центре родительского кадра или просто что-то легкого в использовании.

  • Как лучше всего настроить Swing GUI?
  • Создание пользовательской кнопки в Java с помощью JButton
  • Как отобразить текущее значение предпочтения Android в сводке предпочтений?
  • Как сделать фотокамеру доступным?
  • Как удалить все дочерние элементы?
  • Android 4.2.1 неправильный кернинг символов (интервал)
  • Как сделать AWT Button () и использовать ImageIcon (), Icon ()?
  • Обновление пользовательского интерфейса из разных streamов в JavaFX
  • Подвижные столбцы со значением с помощью java
  • Как настроить ListField в BlackBerry?
  • Выберите все содержимое текстового поля, когда он получает фокус (Vanilla JS или jQuery)
  • Давайте будем гением компьютера.