永久SWT外壳窗口位置

时间:2019-02-14 21:06:00

标签: eclipse shell swt

我有类似于以下示例的代码,该代码使我可以在其他位置打开外壳。我需要做的是跟踪窗口的位置(如果已移动)并保存这些位置,以备下次打开窗口时使用。有什么建议吗?

 public StartupSplashShell(Display display)
 {
     shell = new Shell(display, SWT.NO_TRIM);
     setupShell();  // place components in the main avoCADo shell
     shell.setText("avoCADo");
     shell.setBackgroundImage(ImageUtils.getIcon("./avoCADo-Splash.jpg", 
     360, 298));
     shell.setSize(360, 298);   //TODO: set intial size to last known size
     Rectangle b = display.getBounds();
     int xPos = Math.max(0, (b.width-360)/2);
     int yPos = Math.max(0, (b.height-298)/2);
     shell.setLocation(xPos, yPos);
     shell.setImage(ImageUtils.getIcon("./avoCADo.png", 32, 32));
     shell.open();
}

2 个答案:

答案 0 :(得分:3)

如果正在使用Eclipse插件,请在退出应用程序处理程序中注入IEclipsePreferences并将边界保存在eclipse首选项中。

@Inject
@Preference
private IEclipsePreferences preferences;

如果您的应用程序是独立的SWT应用程序,则可以使用文件(例如属性)或数据库来持久化外壳程序的边界

mainShell.getBounds() // serialize it in String
preferences.put("SHELL_BOUNDS", boundStr);

在应用程序启动时再次注入偏好设置,并从偏好设置中检索范围

bounds = preferences.get("SHELL_BOUNDS", "");

然后您可以设置外壳的位置和大小

mainShell.setLocation(xAxis, yAxis);
mainShell.setSize(width, height);

答案 1 :(得分:2)

假设这是一个普通的SWT应用程序,则每次外壳移动时都可以使用SWT.Move侦听器来告知:

shell.addListener(SWT.Move, event ->
  { 
    Point location = shell.getLocation();
    ....
  });

或者您可以使用SWT.Close侦听器来侦听shell关闭:

shell.addListener(SWT.Close, event ->
  { 
    Point location = shell.getLocation();
    ....
  });

如果要在应用程序的运行之间保存位置,则必须将位置保存为Properties文件之类的文件。