チュートリアルで試せる内容 †
1)作成する処理モジュールの仕様を決めます †
- [モジュール名] BarGraph(棒グラフ)
- [入力] String型配列,int型配列
- [処理] int型配列で与えられる数字による棒グラフを作成,各棒の名前にString配列で与えられる文字を利用して,棒グラフを作成
- [出力] 作成した棒グラフを表示
2)SampleDisplay2.java を利用して,モジュール作成の準備をします †
- tetdmのフォルダ内の,moduleフォルダ内のVisualizationModuleフォルダ内にある,SampleDisplay2フォルダを,フォルダごとコピーします
- コピーしてできたフォルダの名前を,作成するモジュール名「BarGraph」に変更します
- コピーして作成したフォルダ内のファイル名を変更します
- SampleDisplay2.java -> BarGraph.java
- SampleDisplay2.txt -> BarGraph.txt (テキストファイルの中身も「棒グラフ」に変更します)
- 必要に応じて,モジュール完成後にREADME.txtを修正します
3)BarGraph.java を編集し,プログラム作成の準備をします †
- プログラム中の SampleDisplay2 と書かれている箇所をすべて BarGraph に変更します(コメント内を含め4カ所)
- // BarGraph.java Version 0.30
- package module.VisualizationModules.BarGraph;
- public class BarGraph extends VisualizationModule
- public BarGraph()
コンストラクタの記述の修正 †
- モジュールのIDを決め,コンストラクタ内のメソッド setModuleID の引数として与えます(今回は9977とします)
- int型の配列,dataNumbersの値を初期化して,受け取るデータ型とその数を指定します.
- 今回は,整数型の配列と文字型の配列をそれぞれ1つずつ受け取ります.
- setToolType(3); ツールタイプはセミプリミティブになります.
public BarGraph()
{
setModuleID(9977); // Set your module ID after you have got it
dataNumbers = new int[]{0,0,0,0, // b,i,d,S
0,1,0,1, // bA,iA,dA,SA
0,0,0}; // bA2,iA2,dA2
setToolType(3);
}
4)一度コンパイルして,BarGraphモジュールの動作を確認します †
- make または ant コマンドでコンパイルします
- コンパイル後TETDMプログラムを起動して,いずれかのテキストを読み込みます
- 処理モジュール作成1改2?で作成した処理モジュール「名詞TOP10」があれば,これを選択して,楕円とテキストの一文目が表示されるのを確認して下さい
(SampleDisplay2.java の処理)
5)棒グラフを表示するプログラムを作成します †
ファイルからの日本語の読み込み(今回は不要) †
- もとからある下記変数とメソッドの内容は,インタフェース内に日本語を表示させたい場合は利用して下さい
- String outputInJapanese;
- String outputText;
- initializePanel()
- initializeData()
処理モジュールからデータを受け取り,棒グラフの表示に必要なデータを保存する変数を,グローバル領域で宣言します †
String names[];
int values[];
initializeData() 内で変数の初期化を行います(オーバーライド) †
- 棒グラフの表示に必要なデータがない場合にエラーを出さないようにします
public void initializeData()
{
names = new String[0];
values = new int[0];
}
処理モジュールからデータを受け取るメソッド,setDataを作成します(オーバーライド) †
- switch,case文を用いて作成します
- case文は0から作成します
- データの受け取りに成功したらtrue,失敗したらfalseを返すboolean型としてメソッドを作成します
public boolean setData(int dataID, String data[])
{
switch(dataID)
{
case 0:
names = data;
return true;
}
return false;
}
public boolean setData(int dataID, int data[])
{
switch(dataID)
{
case 0:
values = data;
return true;
}
return false;
}
棒グラフの表示プログラムを作成します †
- displayOperations メソッドの case 0: が自動的に実行されますので,そこから呼び出されるところに記述します
- case 0:にrepaint(); を記述している場合は,paintComponent(Graphics g)から呼び出されるところに記述します
- 今回は,可視化モジュール ScoreDist の内容をほぼ転用して作成しています
- スーパークラス内の変数,sizeX, sizeYには,表示できるパネルの縦と横のサイズが,メソッドgetPanelSize()が呼び出されるたびに格納されますので,この値を利用してパネルサイズの変更に対応できるようにします
int width;
//background
public void drawBackground(Graphics2D g2)
{
if(values.length == 0)
width = 0;
else
width = (sizeY-10)/values.length;
g2.setColor(Color.cyan);
g2.fillRect(0,0, sizeX, sizeY);
g2.setColor(Color.white);
g2.drawRect(10,10, sizeX-20, values.length*width);
}
public void drawData(Graphics2D g2)
{
int max=1;
for(int i=0;i<values.length;i++)
if(values[i] > max)
max = values[i];
g2.setColor(Color.white);
for(int i=0;i<values.length;i++)
g2.fillRect(10,10+width*i, (int)((sizeX-20)*(double)values[i]/max), width);
g2.setFont(new Font("Dialog", Font.BOLD, 20));
g2.setColor(Color.black);
for(int i=0;i<names.length;i++)
if(i < values.length)
g2.drawString(names[i]+"("+values[i]+")", 20,(int)(10+width*i+width*0.5));
else
g2.drawString(names[i], 20,(int)(10+width*i+width*0.5));
}
//////////paint
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
getPanelSize();
drawBackground(g2); //background
if(values.length == 0)
return;
drawData(g2);
}
6)コンパイルして動作を確認します †
- 浦島太郎を入力し,「名詞TOP10」と組み合わせた場合,各名詞と頻度に応じた棒グラフ,および名詞と頻度が表示されます.
- 統合環境のウインドウのサイズを変えても,パネル内の表示がサイズに応じて変更されることを確認します