ファイルをバイナリ形式で表示する (Java+Swing編)
画面のデザインはツールを使わずに、ソースコードに直でコードを書きます。
JavaSwing001.java
/* ----------------------------------------------------------------------- */
/**
* コンストラクタ.
*
* @param title メインウインドウのタイトルバーに表示する文字列.
*/
JavaSwing001( String title ) {
//! タイトルバーを表示する.
setTitle( title );
//! ウインドウのサイズと表示位置を設定する.
setBounds( 200, 200, 800, 600 );
//!「X」ボタンのイベントを設定する.
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
//! ネイティブシステムの Look & Feelをセット.
try{
UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
} catch( Exception e ){
e.printStackTrace();
}
//! メニューを作成する.
createMenu();
//! ディレクトリ・ツリー表示ビューを生成する.
JScrollPane treePanel = createTreeView();
//! ファイル一覧表示ビューを生成する.
JScrollPane listPanel = createListView();
//! バイナリデータ表示ビューを生成する.
JPanel dataPanel = createDataView();
//! 右側の分割ウインドウを作成する.
JSplitPane rightPanel = new JSplitPane( JSplitPane.VERTICAL_SPLIT );
rightPanel.setLeftComponent( listPanel );
rightPanel.setRightComponent( dataPanel );
//! 全体の分割ウインドウを作成する.
JSplitPane mainPanel = new JSplitPane();
mainPanel.setLeftComponent( treePanel );
mainPanel.setRightComponent( rightPanel );
Container contentPane = getContentPane();
contentPane.add( mainPanel, BorderLayout.CENTER );
//! ステータスバーを生成する.
contentPane.add( createStatusBar(), BorderLayout.PAGE_END );
//! イベント通知先をセットする.
fileTreeView.addEventListener( this );
fileListView.addEventListener( this );
}
- タイトルバーに表示する文字列を設定します。
- ウインドウのサイズと表示位置を設定します。
- 「X」ボタンの動作を「ウインドウの終了」に設定します。
- Look & Feelをセットします。
- メニューを作成します。
- ディレクトリ・ツリー表示ビューを生成します。
- ファイル一覧表示ビューを生成します。
- バイナリデータ表示ビューを生成します。
- 右側の分割ウインドウを作成します。
- 全体の分割ウインドウを作成します。
- ステータスバーを生成します。
- イベント通知先をセットします。
JavaSwing001.java
/* ----------------------------------------------------------------------- */
/**
* ディレクトリ・ツリー表示ビューを生成する.
*
* @return 生成したディレクトリ・ツリー表示ビュー.
*/
private JScrollPane createTreeView() {
//! スクロール・パネルを生成する.
JScrollPane panel = new JScrollPane();
//! ツリービューを生成する.
fileTreeView = new FileTreeView();
//! スクロールビューにツリービューを配置する.
panel.setViewportView( fileTreeView );
panel.setPreferredSize( new Dimension(150, 400) );
return panel;
}
ディレクトリツリー・ビューを生成します。
ツリーコントロールクラスの JTree から派生した ディレクトリツリー・ビュー(FileTreeView)を、スクロール・ビュー(JScrollPane) に配置します。
スクロール・ビューにビューを同期させるメソッドは、「JScrollPane.setViewport()」です。
public void JScrollPane.setViewport(JViewport viewport)
引数 | 説明 |
---|---|
viewport | 同期させるビュー。 |
スクロール・ビューの初期サイズを設定するメソッドは、「JScrollPane.setPreferredSize()」です。
public void setPreferredSize(Dimension preferredSize)
引数 | 説明 |
---|---|
preferredSize | 新しい推奨サイズ。 |
JavaSwing001.java
/* ----------------------------------------------------------------------- */
/**
* ファイル一覧表示ビューを生成する.
*
* @return 生成したファイル一覧表示ビュー.
*/
private JScrollPane createListView() {
//! スクロール・パネルを生成する.
JScrollPane panel = new JScrollPane();
//! リストビューを生成する.
fileListView = new FileListView();
//! スクロールビューにリストビューを配置する.
panel.setViewportView( fileListView );
//! リストビューの背景色を白色にする.
panel.getViewport().setOpaque( true );
panel.getViewport().setBackground( Color.WHITE );
panel.setPreferredSize( new Dimension(400, 100) );
return panel;
}
ファイル一覧表示ビューを生成します。
テーブルコントロールクラスの JTable から派生した ファイル一覧表示ビュー(FileListView)を、スクロール・ビュー(JScrollPane) に配置します。
ファイル一覧表示ビューの背景色を白色にします。
FileTreeView.java
/* ----------------------------------------------------------------------- */
/**
* バイナリデータ表示ビューを生成する.
*
* @return 生成したバイナリデータ表示ビュー.
*/
private JPanel createDataView() {
//! バイナリデータ表示ビューの土台になるパネルを生成する.
JPanel panel = new JPanel();
panel.setLayout( new BorderLayout() );
//! 水平スクロールバーをパネルに配置する.
JScrollBar sbH = new JScrollBar( JScrollBar.HORIZONTAL );
panel.add( sbH, BorderLayout.SOUTH );
//! 垂直スクロールバーをパネルに配置する.
JScrollBar sbV = new JScrollBar( JScrollBar.VERTICAL );
panel.add( sbV, BorderLayout.EAST );
//! バイナリデータ表示ビューをパネルに配置する.
fileDataView = new FileDataView( sbV, sbH );
panel.add( fileDataView, BorderLayout.CENTER );
return panel;
}
バイナリデータ表示ビューを生成します。
バイナリデータ表示ビューの土台になるパネル(JPanel)を生成します。
水平スクロールバーをパネルに下側に配置します。
垂直スクロールバーをパネルに右側に配置します。
バイナリデータ表示ビューをパネルの中央に配置します。
FileTreeView.java
/* ----------------------------------------------------------------------- */
/**
* ステータスバーを生成する.
*
* @return 生成したステータスバー.
*/
private JPanel createStatusBar() {
//! ステータスバーになるパネルを生成する.
JPanel bar = new JPanel( new FlowLayout( FlowLayout.LEFT ) );
statusBar = new JLabel( "" );
//! パネルにラベルを配置する.
bar.add( statusBar );
return bar;
}
ステータスバーを生成します。
まず、ステータスバーになるパネル(JPanel)を、メッセージバーに表示するメッセージが左寄せになるようにレイアウトマネージャを設定して生成します。
FileTreeView.java
/* ----------------------------------------------------------------------- */
/**
* メニューを作成する.
*
*/
private void createMenu() {
//! メニューバーを生成する.
JMenuBar menubar = new JMenuBar();
//! メニューバーに「ファイル」を追加.
JMenu menu1 = new JMenu( "ファイル" );
menubar.add( menu1 );
//!「ファイル」にサブメニュー「アプリケーションの終了」を追加.
JMenuItem menuitem1_1 = new JMenuItem( "アプリケーションの終了" );
menu1.add( menuitem1_1 );
menuitem1_1.addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
menuAppExit( e );
}
});
//! メニューバーに「ヘルプ」を追加.
JMenu menu2 = new JMenu( "ヘルプ" );
menubar.add( menu2 );
//!「ヘルプ」にサブメニュー「バージョン情報」を追加.
JMenuItem menuitem2_1 = new JMenuItem( "バージョン情報" );
menu2.add( menuitem2_1 );
menuitem2_1.addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
menuAppAbout( e );
}
});
//! フレームウインドウに作成したメニューを登録する.
setJMenuBar( menubar );
}
メニューバーを生成します。
メニュー項目として「ファイル」、「ヘルプ」をメニューバーに追加します。
「ファイル」のサブメニューとして「アプリケーションの終了」を追加します。
併せてサブメニュー選択時のイベント処理(menuAppExit)も登録します。
「ヘルプ」のサブメニューとして「バージョン情報」を追加します。
併せてサブメニュー選択時のイベント処理(menuAppAbout)も登録します。
最後に生成したメニューバーをメインフレームに登録します。