今から始めるプログラミング6

ところで、解説していないこともたくさんあるかもしれないけれど。Javaプログラミングの技術的には、4までの内容で、僕は初プロジェクトにピンで参加させられた。

3年くらい経歴を上乗せさせられ、そして周りは6大学卒しかいない会社とか、某MSの勧誘を断ったとかいう猛者?の中で専門卒の開発経験のない状態でしたね。正直経歴の上乗せとかほんとやばい慣習ですよね、今でもあるんでしょうか。

とりあえずJavaのプログラミング講習は5日くらい(夕方2時間くらい)で3万円くらいだったと思います。画面的には電卓の劣化版ですね。2つのテキストフィールドと答えのラベル、四則演算のボタンで講習中には実際は一つできるぐらい?というものでした。

VBの方が簡単にできそうでしたし、とくにJavaという特徴は僕にはわかりませんでした。

という感じで車の部品メーカーの研究部門の支援システムだったかな?担当した画面は4つで、2つは簡単なもの(PG3日くらいでできる想定)、残りの2つは中位と難しい画面、PG5日とPG10日くらいの工数として見積もられていた(うろ覚え)感じです。

正直なところ、画面のみてくれは実装できたものの、ビジネスロジックをどう呼ぶとか、全然わかりませんでした。

とはいえ、周りの方がみんないい人だったので、なんとか話を聞いて、ようやく完成させたのですが・・・。

ビジネスロジックとのつなぎでいきなり動きませんでした。配列の形式で受け取らないといけないのですが、受け取るオブジェクトのインスタンスを生成しておかないといけなくて、配列をループで回してnewするというプロセスが抜けていました。

まぁそんな感じです。

現在はスキル合わせとして、だいぶマシな内容になっているとは思いますが、正直なところ、面接というのはスキルよりも相性をみるだけでいいのではないでしょうか?いくらスキルがすごくてもこいつとは合わない、というような人とは仕事が捗ることはないと思いますし、実際この会社「顔」だよね、という現場もたくさんありました。

こういうの書き出すとキリがないので、この辺にしておきますが、まぁ闇は深いですね。

さて、ファイルのリストを表示するプログラムをつくりましたが、今回は画像を選択するようにして、出力画面で画像を表示するというふうに、変更します。

主要なクラスの説明です。

JFileChooser:ファイルやフォルダ選択をさせるためのダイアログを表示するクラスです。

ImageIcon:画像の読み込みとかでいろいろクラスを利用するより、パスの情報から画像アイコンを作れるこのクラスの方が簡単なので、これにしました・・・というか画像処理忘れました・・・すいません。

本来?はImageIOとかBufferedImageなどを使用します。

JLabel:テキストフィールドと違い、表示のみできるコンポーネントです。

JPanel:汎用的なパネルです。パネルのうえにパネルを追加したりできます。複雑な画面構築には必須です。

JScrollPane:画面の大きさと表示するものの大きさが合わない時にスクロールバーを設置して対応しますが、そんな時にこれに貼り付けて大きさを指定すると、合わない場合にスクロールバーが勝手に追加されてくれます。

 

以上のコンポーネントを使用して以下のようなクラスを作りました。

 

-------------------------------------------

package sample3;

 

import java.awt.Dimension;

import java.awt.FlowLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.File;

 

import javax.swing.JButton;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

 

/**

* パスを選択する画面

*

* @author matsuiyoshikazu

**/

public class SampleFrame3 extends JFrame implements ActionListener {

 

/**

* コンストラクタ クラスメイト同じ名前のメソッドです

*/

public SampleFrame3() {

this.setTitle("サンプル3");

this.setSize(new Dimension(300, 200));

this.setLayout(new FlowLayout());

 

// ボタンのオブジェクト生成

JButton btn = new JButton("画像選択");

// ボタンをリスナーに追加

btn.addActionListener(this);

// ボタンを画面に追加

this.getContentPane().add(btn);

this.setVisible(true);

}

 

/**

* リスナーのメソッド ファイル選択ダイアログを表示、取得したパスを出力画面に渡します

*

* @Override

*/

 

public void actionPerformed(ActionEvent e) {

 

System.out.println("メソッドが呼ばれました");

// ファイルの選択ダイアログを表示するクラスです

JFileChooser filechooser = new JFileChooser();

// 選択の可否をintで返します。キャンセルという選択もあるので、戻り値でまず判断します。

int selected = filechooser.showOpenDialog(this);

//細かく制御すると長くなるので、選択された時のみプログラムします。

if (selected == JFileChooser.APPROVE_OPTION) {

//選択されたファイルを取得します。

File file = filechooser.getSelectedFile();

//選択されたファイルのパスを引数に出力画面を呼び出します。

new OutputFrame(file.getAbsolutePath());

}

 

}

 

public static void main(String[] args) {

 

new SampleFrame3();

 

}

 

}

----------------------------------------

以上が入力画面(テキストフィールドは不要なのでとってしまいました。普通は、選択したファイルの名前とかパスをテキストフィールドに入力するようにしますが、次の画面で表示するだけなので、ボタンだけになっています。)です。出力画面は以下です。

OutputFrame

---------------------------------------

package sample3;

import java.awt.Dimension;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

/**
* 画像表示画面
*
* @author matsuiyoshikazu
*
*/
public class OutputFrame extends JFrame {

public OutputFrame(String input) {
readImage(input);
}

/**
* 画像を読み込んだ画像を表示
**/
private void readImage(String input) {
// 引数で画像ファイルのパスが届くのでIconを作成
ImageIcon icon = new ImageIcon(input);

this.setTitle("画像を表示");
//画面の大きさをiconから取得、指定しているのですが///
this.setSize(new Dimension(icon.getIconWidth(), icon.getIconHeight()));
// パネルにラベルを追加して、スクロールにパネルを追加して、ラベルにIconを追加して、画面を表示
JPanel panel = new JPanel();
JLabel label = new JLabel(icon);
JScrollPane scrol = new JScrollPane(panel);
panel.add(label);
this.add(scrol);
this.setVisible(true);
}

}

---------------------------------------

どうですかね、これくらいのコーディングで画像の表示もできてしまうので、意外にノベルゲーム的なものなら、もう少しでできてしまいそうな気がしませんか?

次回は、こんな感じの画面遷移を考えてます的な設計みたいなことをやって、ノベルゲームを作ってみたいと思います。

以下のジャンク品やくだらないプログラムもよろしくです。

ma2-ys - BOOTH