今から始めるプログラミング4
クラス分けできました?
まぁ次回で今回の簡単アプリも含めてクラスを細かく分割してみますので、とりあえず入力と出力を別々の画面で実装してみます。
・・・入力する画面でパス(ディレクトリの階層みたいなもの)を入力するとそのパスに含まれるファイルのリストを出力画面で表示する、、、みたいなものをつくります。
まず、入力画面です。
-------------------------------
package sample2;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
/**
* パスを入力する画面
* @author matsuiyoshikazu
**/
public class SampleFrame2 extends JFrame implements ActionListener {
/**テキストのフィールドです
* このクラスのどこでもアクセスできるようにクラスの属性として宣言しています
***/
private JTextField text = null;
/**
* テキストを取得するメソッド
* テキストフィールドはクラス属性なのであまり意味ないかもしれないですが、
* パブリックにアクセスするためにgetterを作りました
* @return 文字列
*/
public String getText() {
if(text==null) {
return null;
}
return this.text.getText();
}
/**
* コンストラクタ
* クラスメイト同じ名前のメソッドです
*/
public SampleFrame2(){
this.setTitle("サンプル2");
this.setSize(new Dimension(300,200));
this.setLayout(new FlowLayout());
//テキストフィールド
text = new JTextField("パスを入力");
this.getContentPane().add(text);
//ボタンのオブジェクト生成
JButton btn = new JButton("実行");
//ボタンをリスナーに追加
btn.addActionListener(this);
//ボタンを画面に追加
this.getContentPane().add(btn);
this.setVisible(true);
}
/**
* リスナーのメソッド
* テキストに入力した値を出力用の画面に渡しています
* @Override
*/
public void actionPerformed(ActionEvent e) {
System.out.println("メソッドが呼ばれました");
System.out.println(this.getText());
new OutputFrame(this.getText());
}
public static void main(String args){
new SampleFrame2();
}
}
-------------------------------
つぎに、出力画面です。
-------------------------------
package sample2;
import java.awt.Dimension;
import java.io.File;
import javax.swing.JFrame;
import javax.swing.JTable;
/**
* ファイルリスト表示画面
* @author matsuiyoshikazu
*
*/
public class OutputFrame extends JFrame{
public OutputFrame(String input) {
createFileList(input);
}
/**
* ファイルのリストを作ります。
**/
private void createFileList(String input) {
File file = new File(input);//Fileのオブジェクトを引数の文字列から
File files = file.listFiles();//引数はパスなので、そのパスに属するファイルのリストを取得します。
JTable table = new JTable(files.length,1);//テーブルを生成します。
for(int i=0;i<files.length;i++) {//生成したテーブルにファイル名をセットしていきます
table.setValueAt(files[i].getName(), i, 0);
}
this.setTitle("ファイルリスト");
this.setSize(new Dimension(300,200));
//テーブルを画面に追加
this.getContentPane().add(table);
this.setVisible(true);
}
}
-------------------------------
どうですか?解説しなければいけないクラスがたくさん出てきているのですが、結構少ないプログラムで入力画面から出力画面へ遷移するようなプログラムが作れました。
javaって簡単でいいです!と思えませんか?
とりあえず今回はこんな感じで。
次回詳しく解説しますね。クラス分割についても。
くだらなくて楽しい?プログラムを公開しています。よろしかったらどうぞ