[英]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.