我尝试了如何在Swing应用程序中使Action可恢复的不同之处。我不是重量级,1000多个线类(有很多内部/非类)的朋友,并尝试将我的代码分成多个类。从而使它们易于重复使用和交换。
对于重复使用相同的操作,我在每个Action自己的类中为 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...");
}
}
}
期待您的建议。提前谢谢。
答案 0 :(得分:2)
一个建议是不要使用包含所有操作的聚合类。只需为每个类使用单独的文件并将其公开。
这种在另一个项目中使用该类的方法,只需要在当前项目中没有特定依赖项的情况下复制该文件。
答案 1 :(得分:2)
这是一个很好的选择练习(尤其是使用静态内部类)?
这是实现大部分基本Swing代码的方式。
例如,看一下DefaultEditorKit的源代码,其中定义了所有的Action。
答案 2 :(得分:1)
我经常做的事情(在guts-gui项目中使用GutsAction
时更容易)是我将相关操作分组到一个类中。
我将每个操作存储为final public
字段(但是如果您讨厌public
字段,您仍然可以将它们private
设置为JTable
并在每个字段上定义一个getter方法。
每个动作都被定义为一个很小的匿名类,其中声明了最后一个字段。
分组标准本质上是有效的,但它们也可以包括一些背景,例如:你可以有一个包含在当前所选订单上执行的各种操作的类(来自订单{{1}}),因此我可以将上下文(当前所选订单)放在一个类中,我也可以放在那里选择更改时启用/禁用所有操作的必要方法。
将操作分组到一个类中有助于避免遍布整个地方的操作类扩散,并且必须管理每个单独操作的实例化。它还可以更轻松地依赖注入几个操作共有的依赖关系。