swing-app使用笔记

 5.1 action的定义与引用 @Action public void setTitle() { appFrame.setTitle(textField.getText()); } ActionMap actionMap = getContext().getActionMap(); setTitleButton.setAction(actionMap.get("setTitle")); textField.setAction(actionMap.get("setTitle")); 5.2 JFrame 典型设置 appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); appFrame.pack(); appFrame.setLocationRelativeTo(null); // 居中显示 appFrame.setVisible(true); 5.3、使用properties文件定义action属性,资源文件包名多一个resources后缀,文件名称一致 资源文件搜索是从当前类的资源文件开始,递归搜索内部类的资源文件.可以运行时注入资源文件。 ResourceMap resourceMap = getContext().getResourceMap(getClass()); resourceMap.injectComponents(mainFrame); @Action public void setTitle() { appFrame.setTitle(textField.getText()); } # setTitle @Action setTitle.Action.text = &Set Window Title setTitle.Action.shortDescription = Set the Window's title 5.4 actiond的属性控制 添加属性 boolean clearEnabled = false; @Action(enabledProperty = "clearEnabled") public void clearTitle() { appFrame.setTitle(""); setClearEnabled(false); } 属性get/set public boolean isClearEnabled() { return clearEnabled; } public void setClearEnabled(boolean clearEnabled) { boolean oldValue = this.clearEnabled; this.clearEnabled = clearEnabled; firePropertyChange("clearEnabled", oldValue, this.clearEnabled); } 使用 @Action public void setTitle() { appFrame.setTitle(textField.getText()); setClearEnabled(true); } 5.5 在action中使用Task 5.5.1 首先定义一个继承了Task的内部私有静态类,用来处理后台任务 A.构造函数一定要调用父类的构造函数 super(app, "ListFilesTask"),前者是引用 任务的Application实例,后者是资源文件key的前缀(非必须)。资源文件与内部类同名。 B.覆写doInBackground()方法(记得使用isCancelled()判断状态),在其中调用 publish()方法把中间处理结果拋给process()方法来与界面交互。 5.5.2 定一个继承上述类的一个内部类(非静态),用来与前台界面交互 A.构造函数一定要调用父类的构造函数来完成初始化。 B.覆写process()方法,处理publish()方法传递过来的中间数据并与界面交互。 5.5.3 可以使用message(formatResourceKey, Object... args)向监听器传递 message 消息。前者是资源文件不包含前缀的key,可以使用其值来格式化显示后面的一系列参数。 5.5.4 监听器使用以下代码,监控任务的进展状态 public void propertyChange(PropertyChangeEvent e) { String propertyName = e.getPropertyName(); if ("message".equals(propertyName)) { messageLabel.setText(e.getNewValue().toString()); } } 5.5.5 action方法返回Task类型。 5.6 Application退出流程 5.6.1 private class MainFrameListener extends WindowAdapter { public void windowClosing(WindowEvent e) { exit(e); } } 5.6.2 private class MaybeExit implements Application.ExitListener { public boolean canExit(EventObject e) { Object source = (e != null) ? e.getSource() : null; Component owner = (source instanceof Component) ? (Component) source : null; int option = JOptionPane.showConfirmDialog(owner, "Really Exit?"); return option == JOptionPane.YES_OPTION; } public void willExit(EventObject e) { // cleanup } } 5.6.3 protected void shutdown() { mainFrame.setVisible(false); } 5.7 action enabledProperty 必须成对使用 firePropertyChange("clearEnabled", oldValue, this.clearEnabled); @Action(enabledProperty = "clearEnabled") public void clearTitle() { appFrame.setTitle(""); setClearEnabled(false); } 5.8 SessionStorage 5.8.1 startup() try { getContext().getSessionStorage().restore(mainFrame, sessionFile); } catch (IOException e) { logger.log(Level.WARNING, "couldn't restore session", e); } 5.8.2 shutdown() try { getContext().getSessionStorage().save(mainFrame, sessionFile); } catch (IOException e) { logger.log(Level.WARNING, "couldn't save session", e); } 

你可能感兴趣的:(swing-app使用笔记)