[英]Best Practice using reusable Actions on GUI Components
我尝试了如何在我的Swing应用程序中使Action可恢复的不同之处。 我不是重量级,1000多个线类(有很多内部/非类)的朋友,并尝试将我的代码分成多个类。 从而使它们易于重复使用和更换。
为了在我为每个Action创建的应用程序中重用相同的Actions ,它们在JMenuBar和JToolBar中使用它。 请看下面的最小例子。
这是一个很好的选择练习(尤其是使用静态内部类)?
public class SomeGUI extends JFrame {
public static void main(String[] args)
{
new SomeGUI();
}
public SomeGUI()
{
setJMenuBar(new MyMenuBar());
add(new MyToolBar());
setSize(400, 400);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
class MyMenuBar extends JMenuBar {
JMenu menu = new JMenu("File");
public MyMenuBar()
{
add(menu);
menu.add(new JMenuItem(new Actions.NewAction("New", null, "New File", KeyEvent.VK_N)));
}
}
class MyToolBar extends JToolBar {
public MyToolBar()
{
add(new Actions.NewAction("New", null, "New File", KeyEvent.VK_N));
}
}
class Actions {
static class NewAction extends AbstractAction {
public NewAction(String name, ImageIcon icon, String desc, Integer mnemonic)
{
super(name, icon);
putValue(SHORT_DESCRIPTION, desc);
putValue(MNEMONIC_KEY, mnemonic);
}
@Override
public void actionPerformed(ActionEvent paramActionEvent)
{
System.out.println("do the new action...");
}
}
}
期待您的建议。 提前致谢。
一个建议是不要使用包含所有操作的聚合类。 只需为每个类使用单独的文件并将其公开。
这种方式在另一个项目中使用该类,您只需复制该文件,假设它在当前项目中没有特定的依赖项。
这是一个很好的选择练习(尤其是使用静态内部类)?
这是实现大部分基本Swing代码的方式。
例如,查看DefaultEditorKit的源代码,其中定义了所有Actions。
我经常做的事情(当使用guts-gui项目中的GutsAction
时更容易)是我将相关的动作分组在一个类中。
我将每个动作存储为final public
字段(但如果您讨厌public
字段,您仍然可以将它们设为private
字段,并在每个字段上定义一个getter方法)。
每个动作都被定义为一个微小的匿名类,其中声明了最终的字段。
分组的标准本质上是功能性的,但它们也可以包含一些上下文,例如,您可以拥有一个类,其中包含对当前所选顺序执行的各种操作(来自订单JTable
),因此我可以放置上下文(当前选定的顺序)只有一个类,我也可以在那里放置必要的方法来启用/禁用选择更改时的所有操作。
将操作分组在一个类中有助于避免遍布整个地方的操作类扩散,并且必须管理每个单独操作的实例化。 它还可以更轻松地依赖注入多个操作共有的依赖项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.