簡體   English   中英

在GUI組件上使用可重用操作的最佳實踐

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM