この例では新しいオーダーを送信する度に警告ダイアログを表示させるGUI(グラフィカル・ユーザー・インターフェース)を追加します。
ダイアログは作成したオーダーのラベルをメッセージテキストで表示します。
ダイアログを閉じる前に新しいオーダーが発生した場合は、ダイアログのメッセージテキストを新しいオーダーのラベルに変更します。
以前作成したFeeds.javaを変更して作成します。
初めに、GUI用の新しいインポートを追加します。
JDialogオブジェクトを使用します、JOptionPaneオブジェクト(JDialogのコンテンツ)も使用します。
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
ダイアログ用のインスタンス変数を宣言します。
private boolean dialogClosed = true;
private JOptionPane optionPane = new JOptionPane(null, JOptionPane.WARNING_MESSAGE);
private JDialog dialog = optionPane.createDialog( null, null ) ;
デフォルトでは、ダイアログが開かれている状態ではプラットフォームへのアクセスはブロックされます。
モーダル(子ウィンドウ)ダイアログを作らないようにするには、onStartメソッドに以下コードを追加します。
dialog.setModal( false );
onDataFeedメソッドからshowNotificationメソッドを呼び出すダイアログを表示します。
新しいオーダーが作成されると、showNotificationメソッドが呼ばれます。
コードの一部を紹介すると以下の通りです
if (currentSMADirection != previousSMADirection) {
previousSMADirection = currentSMADirection;
IOrder newOrder = engine.submitOrder("MyStrategyOrder" + uniqueOrderCounter++, myInstrument, myCommand,
0.001, 0, 1, stopLossPrice, takeProfitPrice);
createdOrderMap.put(newOrder, false);
SwingUtilities.invokeLater( new Runnable(){
public void run(){
showNotification();
}
});
showNotificationメソッド新しいオーダーが作成される(古いダイアログが閉じられている時)度にダイアログを表示し、
古いダイアログが閉じられていない場合は、既存のダイアログメッセージを変更します。
ダイアログが閉じられていない場合は、ダイアログのイベントを確認するロジックを追加します。
このケースではウインドウのクローズイベントを確認します。
ダイアログウインドウが閉じられていたら、dialogClosed変数にfalseを設定します。
private void showNotification(){
String message = "MyStrategyOrderオーダーは" + (uniqueOrderCounter -1) + "回作成されました。";
if( dialogClosed ){
dialog.addComponentListener(new ComponentAdapter() {
public void componentHidden(ComponentEvent e){
dialogClosed = true;
}
});
optionPane.setMessage(message);
dialog.setVisible(true);
dialogClosed = false;
} else {
optionPane.setMessage(message);
dialog.validate();
}
}
サンプルソースコード:
FeedsGUI.java
ストラテジーを実行している時、新しい警告ダイアログが表示されます。
ダイアログを閉じると、次のオーダー送信で新しいダイアログが表示されます。
新しいオーダーが送信される前にダイアログを閉じなかった場合、ダイアログのメッセージが変更されます。
JDialogと
Java swingオブジェクト
の詳細についてはJavaのサイトを参照して下さい。