### Navigation

- index
- next |
- previous |
- astah* Plug-in 開発チュートリアル v1.0 documentation »

# 拡張タブビューを作ってみましょう。

astah*プラグインには、拡張タブビューがあります。これを使うと、例えばクラス情報のサマリを一覧にしてastah*上で見ることができるプラグインを作成できます。ここでは、”Hello World”という文字列を表示する拡張タブビューを作成する方法を紹介します。

## 拡張タブビューを実装しましょう

拡張タブビューはIPluginExtraTabViewインターフェースの実装クラスとして定義します。下記のソースコードは、IPluginExtraTabViewを実装したHolloWorldViewの例です。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    /*
     * パッケージ名は、生成したプラグインのパッケージ名よりも下に移してください。
     * プラグインのパッケージ名=> com.example
     *   com.change_vision.astah.extension.plugin => X
     *   com.example                              => O
     *   com.example.internal                     => O
     *   learning                                 => X
     */
    package com.example.internal;

    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Container;

    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;

    import com.change_vision.jude.api.inf.project.ProjectAccessor;
    import com.change_vision.jude.api.inf.project.ProjectAccessorFactory;
    import com.change_vision.jude.api.inf.project.ProjectEvent;
    import com.change_vision.jude.api.inf.project.ProjectEventListener;
    import com.change_vision.jude.api.inf.ui.IPluginExtraTabView;
    import com.change_vision.jude.api.inf.ui.ISelectionListener;

    public class HelloWorldView extends JPanel implements IPluginExtraTabView, ProjectEventListener {

        public HelloWorldView() {
            initComponents();
        }

        private void initComponents() {
            setLayout(new BorderLayout());
            add(createLabelPane(), BorderLayout.CENTER);
            addProjectEventListener();
        }

      private void addProjectEventListener() {
        try {
          ProjectAccessor projectAccessor = ProjectAccessorFactory.getProjectAccessor();
          projectAccessor.addProjectEventListener(this);
        } catch (ClassNotFoundException e) {
          e.getMessage();
        }
      }

      private Container createLabelPane() {
          JLabel label = new JLabel("hello world");
            JScrollPane pane = new JScrollPane(label);
            return pane;
        }

        @Override
        public void projectChanged(ProjectEvent e) {
        }

        @Override
        public void projectClosed(ProjectEvent e) {
        }

         @Override
        public void projectOpened(ProjectEvent e) {
        }

      @Override
      public void addSelectionListener(ISelectionListener listener) {
      }

      @Override
      public Component getComponent() {
        return this;
      }

      @Override
      public String getDescription() {
        return "Show Hello World here";
      }

      @Override
      public String getTitle() {
        return "Hello World View";
      }

      public void activated() {

      }

      public void deactivated() {

      }
    }

getComponent()は表など拡張タブビュー上に表示されるコンテンツをastah*に返します。例では、拡張タブビュー上に”Hello World”を表示するHelloWorldViewインスタンスを返しています。拡張タブビューのタイトルはgetTitle()で定義します。

ProjectEventListenerインターフェースを実装したクラスは、astah*が現在開いているモデルのオブザーバーです。クラスの追加や削除などモデルに変更があった場合、projectChangedメソッドが呼ばれます。

## 拡張タブビューをastah*に追加しましょう

続いてplugin.xmlに拡張タブビューの追加をしましょう。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="UTF-8"?>
    <plugin>
       <extension point="com.change_vision.astah.ui.view">
            <view
                id="com.example.internal.HelloWorldView"
                type="extraTab"
                class="com.example.internal.HelloWorldView" />
       </extension>
    </plugin>

各タグの意味は下記のとおりです。

Tag Name | Attribute | Required | Description
--- | --- | --- | ---
extension |  | ○ | 拡張ポイントを指定します｡
| point | ○ | com.change_vision.astah.ui.viewを指定
view |  | ○ | ビューを指定します。
| id | ○ | ビューのIDです。
| type | ○ | 表示する場所を指定します｡
|  |  | 拡張ビューの場合､extraTabを指定します。
| class | ○ | 拡張タブに表示する実装クラスを指定します｡

これで拡張タブビューの追加ができました。

### Navigation

- index
- next |
- previous |
- astah* Plug-in 開発チュートリアル v1.0 documentation »