猿问
下载APP

设置JFrame位置的最佳做法

设置JFrame位置的最佳做法

我有一个(有点哲学)问题相对于Swing,或者一般的GUI编程。是否有关于在何处定位JFrame应用程序中使用的实例的公认最佳实践?

  1. 第一帧和主框架应该放在哪里?总是在中心(setLocationRelativeTo(null))?

  2. 儿童应该在哪里JFrame找到?相对于它的父母JFrame,在屏幕的中心,我们想要的任何地方?

我一直认为有一些最佳实践,有点像这样的“GUI圣经”,我错了,我应该(喘气)任意决定该做什么?


aluckdog
浏览 49回答 3
3回答

幕布斯6054654

这是一个包含以下建议的示例:气垫船满鳗鱼 - 按平台设置位置。Aardvocate Akintayo Olu - 序列化位置。但继续增加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);这使窗口“显示在本机窗口系统的默认位置”。有关此内容的更多信息:Window API

慕慕0277861

我总是做的是从主屏幕的屏幕中心开始,或者在子帧的父级中心,我记录这个位置。然后,当用户将帧移动到他们想要的任何位置时,我会记录新位置,当下一个应用程序启动时,我会使用最后一个位置来放置框架。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答