• 検索結果がありません。

第 2 章 GUI ツールの概要 3

3.7 デッドラインミスを検索する機能の実装

try {

I m a g e I O . w r i t e ( S w i n g F X U t i l s . f r o m F X I m a g e ( image , n u l l ) , " png " , fi l e ) ;

} c a t c h ( I O E x c e p t i o n e ) { e . p r i n t S t a c k T r a c e () ; }

}

エクスポートを行う際には、現在表示されているチャートがそのままエクスポートされ る。表示範囲やズーム回数なども反映してエクスポートを行うことができる。実際に表示 範囲として

6700〜6730

ティックを指定し、ズームを

2

回行った状態でエクスポートした 画像が図

3.15

である。

3.15:

表示範囲を指定しズームしてエクスポートした画像

3.16:

デッドラインミス検索のメニュー 図

3.17:

検索されたデッドラインミスの表示

3.18:

入力ファイル未選択のエラー表示

Listing 3.16:

デッドラインミス検索のメニュー表示の実装

...

p u b l i c c l a s s C h a r t C r e a t e r e x t e n d s A p p l i c a t i o n { ...

@ O v e r r i d e

p u b l i c v o i d s t a r t ( S t a g e s t a g e ) { ...

Me n u m e n u D e a d l i n e M i s s = new M e n u (" D e a d l i n e M i s s ") ; M e n u I t e m n e x t = new M e n u I t e m (" N e x t ") ;

ne x t . s e t O n A c t i o n ( new E v e n t H a n d l e r < A c t i o n E v e n t >() { p u b l i c v o i d h a n d l e ( A c t i o n E v e n t t ) {

try {

ne x t ( s t a g e ) ;

} c a t c h ( E x c e p t i o n e ) {

A l e r t c h a r t N u l l = new A l e r t ( A l e r t T y p e . E R R O R ) ; c h a r t N u l l . s e t T i t l e (" E r r o r ") ;

c h a r t N u l l . s e t C o n t e n t T e x t (" O p e n a f i l e f i r s t .") ; c h a r t N u l l . s h o w A n d W a i t () . i f P r e s e n t ( r e s p o n s e - > {

if ( r e s p o n s e == B u t t o n T y p e . OK ) { r e t u r n ;

} }) ; }

}

}) ;

M e n u I t e m p r e v i o u s = new M e n u I t e m (" P r e v i o u s ") ;

p r e v i o u s . s e t O n A c t i o n ( new E v e n t H a n d l e r < A c t i o n E v e n t >() { p u b l i c v o i d h a n d l e ( A c t i o n E v e n t t ) {

try {

p r e v i o u s ( s t a g e ) ; } c a t c h ( E x c e p t i o n e ) {

A l e r t c h a r t N u l l = new A l e r t ( A l e r t T y p e . E R R O R ) ; c h a r t N u l l . s e t T i t l e (" E r r o r ") ;

c h a r t N u l l . s e t C o n t e n t T e x t (" O p e n a f i l e f i r s t .") ; c h a r t N u l l . s h o w A n d W a i t () . i f P r e s e n t ( r e s p o n s e - > {

if ( r e s p o n s e == B u t t o n T y p e . OK ) { r e t u r n ;

} }) ; }

} }) ; ...

3.2

節で記述した入力ファイルの読み取りの部分でデッドラインミスが発生した時刻の重 複を排除した昇順のリストをあらかじめ作成しておく。これによって現在グラフに描画さ れてい部分にデッドラインミスが発生していなくても、デッドラインミスの発生箇所に ジャンプすることができる。メニューから

Deadline Miss

Next

を選択した際に呼び出 される

ChartCreater

クラスの

next()

メソッドの実装は以下

Listing3.17

である。前述した 入力ファイルが未選択の場合のエラー処理もここに記述されている。デッドラインミスが 発生した時刻のリストを参照し、次のデッドラインの時刻を中央に表示するグラフを表示 する。また、最後のデッドラインミスであるにもかかわらず、Nextが呼び出された場合 には図

3.19

のようなエラーメッセージを表示する。

3.19:

最後のデッドラインミスであることを示すエラー表示

Listing 3.17:

デッドラインミスの後方への検索

...

p u b l i c c l a s s C h a r t C r e a t e r e x t e n d s A p p l i c a t i o n { ...

p u b l i c v o i d n e x t ( S t a g e s t a g e ) t h r o w s E x c e p t i o n { if ( c h a r t == n u l l ) {

t h r o w new E x c e p t i o n () ; }

int c u r r e n t I n d e x = 0;

A r r a y L i s t < Integer > d e a d l i n e M i s s T i m e L i s t = g e t D e a d l i n e M i s s T i m e L i s t () ;

if ( d e a d l i n e M i s s T i m e L i s t == n u l l || d e a d l i n e M i s s T i m e L i s t . i s E m p t y () == t r u e || d e a d l i n e M i s s T i m e L i s t . s i z e () == 0) {

A l e r t n o D e a d l i n e M i s s = new A l e r t ( A l e r t T y p e . I N F O R M A T I O N ) ; n o D e a d l i n e M i s s . s e t T i t l e (" I n f o r m a t i o n ") ;

n o D e a d l i n e M i s s . s e t C o n t e n t T e x t (" T h e r e is no d e a d l i n e m i s s .") ; n o D e a d l i n e M i s s . s h o w A n d W a i t () . i f P r e s e n t ( r e s p o n s e - > {

if ( r e s p o n s e == B u t t o n T y p e . OK ) { r e t u r n ;

} }) ; } e l s e {

if ( d e a d l i n e m i s s I n d e x < d e a d l i n e M i s s T i m e L i s t . s i z e () - 1) { d e a d l i n e m i s s I n d e x ++;

int l a s t T i m e = t a s k L i s t . get ( t a s k L i s t . s i z e () - 1) . g e t T i m e () ;

int d e a d l i n e M i s s T i m e = d e a d l i n e M i s s T i m e L i s t . get ( d e a d l i n e m i s s I n d e x ) ;

if ( l a s t T i m e <= 50 || d e a d l i n e M i s s T i m e <= 25) { c r e a t e C h a r t (0 , l a s t T i m e , s t a g e ) ;

c u r r e n t M i n T i m e = 0;

c u r r e n t M a x T i m e = l a s t T i m e ;

} e l s e if ( l a s t T i m e >= 50 && d e a d l i n e M i s s T i m e >=

l a s t T i m e - 25) {

c r e a t e C h a r t ( l a s t T i m e - 50 , l a s t T i m e , s t a g e ) ; c u r r e n t M i n T i m e = l a s t T i m e - 50;

c u r r e n t M a x T i m e = l a s t T i m e ; } e l s e {

c r e a t e C h a r t ( d e a d l i n e M i s s T i m e - 25 , d e a d l i n e M i s s T i m e + 25 , s t a g e ) ;

c u r r e n t M i n T i m e = d e a d l i n e M i s s T i m e - 25;

c u r r e n t M a x T i m e = d e a d l i n e M i s s T i m e + 25;

} } e l s e {

int l a s t T i m e = t a s k L i s t . get ( t a s k L i s t . s i z e () - 1) . g e t T i m e () ;

int d e a d l i n e M i s s T i m e = d e a d l i n e M i s s T i m e L i s t . get ( d e a d l i n e m i s s I n d e x ) ;

if ( l a s t T i m e <= 50 || d e a d l i n e M i s s T i m e <= 25) { c r e a t e C h a r t (0 , l a s t T i m e , s t a g e ) ;

c u r r e n t M i n T i m e = 0;

c u r r e n t M a x T i m e = l a s t T i m e ;

} e l s e if ( l a s t T i m e >= 50 && d e a d l i n e M i s s T i m e >=

l a s t T i m e - 25) {

c r e a t e C h a r t ( l a s t T i m e - 50 , l a s t T i m e , s t a g e ) ; c u r r e n t M i n T i m e = l a s t T i m e - 50;

c u r r e n t M a x T i m e = l a s t T i m e ; } e l s e {

c r e a t e C h a r t ( d e a d l i n e M i s s T i m e - 25 , d e a d l i n e M i s s T i m e + 25 , s t a g e ) ;

c u r r e n t M i n T i m e = d e a d l i n e M i s s T i m e - 25;

c u r r e n t M a x T i m e = d e a d l i n e M i s s T i m e + 25;

}

A l e r t n o N e x t D e a d l i n e M i s s = new A l e r t ( A l e r t T y p e . I N F O R M A T I O N ) ;

n o N e x t D e a d l i n e M i s s . s e t T i t l e (" I n f o r m a t i o n ") ;

n o N e x t D e a d l i n e M i s s . s e t C o n t e n t T e x t (" T h i s is the l a s t d e a d l i n e m i s s .") ;

n o N e x t D e a d l i n e M i s s . s h o w A n d W a i t () . i f P r e s e n t ( r e s p o n s e - > { if ( r e s p o n s e == B u t t o n T y p e . OK ) {

r e t u r n ; }

}) ; }

} } ...

メニューから

Deadline Miss

Previous

を選択した際に呼び出される

ChartCreater

クラ

スの

prev()

メソッドの実装は以下

Listing3.18

である。また、最初のデッドラインミスで

あるにもかかわらず、Previousが呼び出された場合には図

3.20

のようなエラーメッセー ジを表示する。

3.20:

最初のデッドラインミスであることを示すエラー表示

Listing 3.18:

デッドラインミスの前方への検索

...

p u b l i c c l a s s C h a r t C r e a t e r e x t e n d s A p p l i c a t i o n { ...

p u b l i c v o i d p r e v ( S t a g e s t a g e ) t h r o w s E x c e p t i o n { if ( c h a r t == n u l l ) {

t h r o w new E x c e p t i o n () ; }

A r r a y L i s t < Integer > d e a d l i n e M i s s T i m e L i s t = g e t D e a d l i n e M i s s T i m e L i s t () ;

if ( d e a d l i n e M i s s T i m e L i s t == n u l l || d e a d l i n e M i s s T i m e L i s t . i s E m p t y () == t r u e || d e a d l i n e M i s s T i m e L i s t . s i z e () == 0) {

A l e r t n o D e a d l i n e M i s s = new A l e r t ( A l e r t T y p e . I N F O R M A T I O N ) ; n o D e a d l i n e M i s s . s e t T i t l e (" I n f o r m a t i o n ") ;

n o D e a d l i n e M i s s . s e t C o n t e n t T e x t (" T h e r e is no d e a d l i n e m i s s .") ; n o D e a d l i n e M i s s . s h o w A n d W a i t () . i f P r e s e n t ( r e s p o n s e - > {

if ( r e s p o n s e == B u t t o n T y p e . OK ) { r e t u r n ;

} }) ; } e l s e {

if ( d e a d l i n e m i s s I n d e x > 0) { d e a d l i n e m i s s I n d e x - -;

int l a s t T i m e = t a s k L i s t . get ( t a s k L i s t . s i z e () - 1) . g e t T i m e () ;

int d e a d l i n e M i s s T i m e = d e a d l i n e M i s s T i m e L i s t . get ( d e a d l i n e m i s s I n d e x ) ;

if ( l a s t T i m e <= 50 || d e a d l i n e M i s s T i m e <= 25) { c r e a t e C h a r t (0 , l a s t T i m e , s t a g e ) ;

c u r r e n t M i n T i m e = 0;

c u r r e n t M a x T i m e = l a s t T i m e ;

} e l s e if ( l a s t T i m e >= 50 && d e a d l i n e M i s s T i m e >=

l a s t T i m e - 25) {

c r e a t e C h a r t ( l a s t T i m e - 50 , l a s t T i m e , s t a g e ) ; c u r r e n t M i n T i m e = l a s t T i m e - 50;

c u r r e n t M a x T i m e = l a s t T i m e ; } e l s e {

c r e a t e C h a r t ( d e a d l i n e M i s s T i m e - 25 , d e a d l i n e M i s s T i m e + 25 , s t a g e ) ;

c u r r e n t M i n T i m e = d e a d l i n e M i s s T i m e - 25;

c u r r e n t M a x T i m e = d e a d l i n e M i s s T i m e + 25;

} } e l s e {

d e a d l i n e m i s s I n d e x = 0;

int l a s t T i m e = t a s k L i s t . get ( t a s k L i s t . s i z e () - 1) . g e t T i m e () ;

int d e a d l i n e M i s s T i m e = d e a d l i n e M i s s T i m e L i s t . get (0) ; if ( l a s t T i m e <= 50 || d e a d l i n e M i s s T i m e <= 25) {

c r e a t e C h a r t (0 , l a s t T i m e , s t a g e ) ; c u r r e n t M i n T i m e = 0;

c u r r e n t M a x T i m e = l a s t T i m e ;

} e l s e if ( l a s t T i m e >= 50 && d e a d l i n e M i s s T i m e >=

l a s t T i m e - 25) {

c r e a t e C h a r t ( l a s t T i m e - 50 , l a s t T i m e , s t a g e ) ; c u r r e n t M i n T i m e = l a s t T i m e - 50;

c u r r e n t M a x T i m e = l a s t T i m e ; } e l s e {

c r e a t e C h a r t ( d e a d l i n e M i s s T i m e - 25 , d e a d l i n e M i s s T i m e + 25 , s t a g e ) ;

c u r r e n t M i n T i m e = d e a d l i n e M i s s T i m e - 25;

c u r r e n t M a x T i m e = d e a d l i n e M i s s T i m e + 25;

}

A l e r t n o N e x t D e a d l i n e M i s s = new A l e r t ( A l e r t T y p e . I N F O R M A T I O N ) ;

n o N e x t D e a d l i n e M i s s . s e t T i t l e (" I n f o r m a t i o n ") ;

n o N e x t D e a d l i n e M i s s . s e t C o n t e n t T e x t (" T h i s is the f i r s t d e a d l i n e m i s s .") ;

n o N e x t D e a d l i n e M i s s . s h o w A n d W a i t () . i f P r e s e n t ( r e s p o n s e - > { if ( r e s p o n s e == B u t t o n T y p e . OK ) {

r e t u r n ; }

}) ; }

} }

なお、前方への検索でも後方への検索でもデッドラインミスが存在しない場合は図

3.21

のように表示される。

3.21:

デッドラインミスが存在しないことを示すメッセージ表示

関連したドキュメント