Stepup Programing〜 Java Fxで四則計算3〜

イントロダクション

前回は「四則計算」と称して足し算を行いました

話が途中で「不思議な設定」が適用されているのですが、まぁお付き合いください(笑) そんなわけでその続きがあります。「その他の掛け算などに関しては以下の情報が入っております。※事の発端は下を参照

「村人A」

『中ボスを倒すために、こちらでも色々と用意がありますすけぇ、下のアイテムを持って行っておくんなせぇ』

アイテム(API部品)

ChoiceBox(Gitにソースあり)

武器(文法)

Javaでの計算するときの書き方です。

int num1 = 1;
int num2 = 2;
int anser = 0;
// 足し算
answer = num1 + num2;
// 引き算
answer = num1 - num2;
// 掛け算
answer = num1 * num2;
// 割り算
answer = num1 / num2;

細かい部分に関してはこちらに記載しています。

Java Basic Level2 〜Arithmetic Calculate〜

「村人A」『ほんじゃ〜よろしくおねげぇします、気をつけておくんなせぇ』

そんなわけで。。。

後の戦いは見守ることにしましょう。しかし、ステップアッププログラミングは続きます。「不思議な設定」で言うなら

「基本装備」を揃えてもらいます。

武器その1(IF文)

条件分岐での処理です。イベント処理の実装部分にて使用しています。

if ("input1".equals(node.getId())) {
	TextField t1 = (TextField) node;
	String input = t1.getText();
	numbers.add(new Integer(input));
} else if("input2".equals(node.getId())) {
	TextField t2 = (TextField) node;
	String input = t2.getText();
	numbers.add(new Integer(input));
} else if("answer".equals(node.getId())) {
	Label anser = (Label) node;
	Integer in1 = numbers.get(0);
	Integer in2 = numbers.get(1);
	int kotae = in1 + in2;
	anser.setText(String.valueOf(kotae));
}

「node」のIdが"???"だったら〜と言う処理です。

if ("test".equals("tess")) {
   System.out.println("例文1");
} else if ("tess".equals("test") {
  System.out.println("IF文のサンプル");
} else {
  System.out.println("タイガーマスク");
}

「もし、"test"と"tess"がイコールの場合、『例文1』」

と言うのが頭の部分の処理をを日本語にして見たものです。

雑魚キャラAとBが現れた!

「雑魚キャラA」『へへへ。。。IF文が使えないと俺は倒せねぇぞ?』

「雑魚キャラB」『アヘアヘ。。。もし、変数numが1だったら"ピンクレンジャー"と表示するプログラムを作ってミロォ、アヘアヘアヘ。。。』

それじゃ、退治の方はよろしくお願いします。

でわでわ。。。








JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜

FXMLで追加したボタンに。。。

onAction属性でメソッドを割り当てる。

<FXML>コピーして作成したファイルを開くと上のような画面が見れます。

<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.*?>
<BorderPane prefHeight="186.0" prefWidth="562.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="zenryokuservice.opencv.fx.tutorial2.FourierController">
<left>
<VBox alignment="CENTER">
<padding>
<Insets left="10" right="10" />
</padding>
   <children>
   <ImageView fx:id="originalImage" />
   </children>
</VBox>
</left>
<right>
<VBox alignment="CENTER" spacing="10">
<padding>
<Insets left="10" right="10" />
</padding>
   <children>
   <ImageView fx:id="transformedImage" />
   <ImageView fx:id="antitransformedImage" />
   </children>
</VBox>
</right>
<bottom>
<HBox alignment="CENTER" prefHeight="77.0" prefWidth="582.0" spacing="10">
<padding>
<Insets bottom="25" left="25" right="25" top="25" />
</padding>
   <children>
   <Button alignment="center" onAction="#loadImage" text="Load Image" />
   <Button fx:id="transformButton" alignment="center" disable="true" onAction="#transformImage" prefHeight="27.0" prefWidth="110.0" text="Apply transformation" />
   <Button fx:id="antitransformButton" alignment="center" disable="true" onAction="#antitransformImage" prefHeight="27.0" prefWidth="94.0" text="Apply anti transformation" />
            <Button fx:id="exeButton" mnemonicParsing="false" text="Execute" onAction="#execute" />
            <SplitMenuButton fx:id="selectorBox" mnemonicParsing="false" prefHeight="27.0" prefWidth="93.0" text="Method">
              <items>
                <MenuItem mnemonicParsing="false" text="Action 1" />
                <MenuItem mnemonicParsing="false" text="Action 2" />
              </items>
            </SplitMenuButton>
   </children>
</HBox>
</bottom>
   <top>
      <Label fx:id="messageLbl" alignment="TOP_CENTER" prefHeight="19.0" prefWidth="361.0" textAlignment="CENTER" BorderPane.alignment="CENTER" />
   </top>
</BorderPane>

上の赤い字の部分が追加したコンポーネントです。対象はボタンのみです。

<対象のボタン>

@FXML
private Button exeButton;

<そして対応するメソッド>

/**
* FXMLファイルにこのメソッドをonAction属性に指定している。
*/
@FXML
public void execute() {
System.out.println("Hello JavaFX");
}

<実行結果>

関連ページ一覧

  1. EclipseにSceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  4. ステップアッププログラミング〜Java FxでHelloWorld解説〜

開発環境構築

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. Java OpenCV 環境セットアップ(on Mac)
  3. Eclipse SceneBuilderを追加する
  4. JavaFX SceneBuilder EclipseSceneBuilder連携~









JavaFX LineChart 〜グラフを描く、ワンポイントレッスン的な〜

LineChartクラスを使用して以下のようなグラフを描きます。

はっきり言ってコピペで作成しました。参照元はOracleのドキュメントです。

もともと作成していた部分に追加して作成しました。ちなみに散布図もありました。

ポイントは以下のように、縦軸と横軸の内容を定義(区別)しているところだと思います。

final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();

あとは、値を代入して行く形で実装完了!Gitでソースをみれます

// 盾と横軸の設定
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Month");       
// チャート(グラフ)
final LineChart<String,Number> lineChart = 
        new LineChart<String,Number>(xAxis,yAxis);
// グラフのタイトル        
lineChart.setTitle("Stock Monitoring, 2010");
// グラフの値を設定する
XYChart.Series series = new XYChart.Series();
series.setName("My portfolio");

series.getData().add(new XYChart.Data("Jan", 23));
series.getData().add(new XYChart.Data("Feb", 14));
series.getData().add(new XYChart.Data("Mar", 15));
series.getData().add(new XYChart.Data("Apr", 24));
series.getData().add(new XYChart.Data("May", 34));
series.getData().add(new XYChart.Data("Jun", 36));
series.getData().add(new XYChart.Data("Jul", 22));
series.getData().add(new XYChart.Data("Aug", 45));
series.getData().add(new XYChart.Data("Sep", 43));
series.getData().add(new XYChart.Data("Oct", 17));
series.getData().add(new XYChart.Data("Nov", 29));
series.getData().add(new XYChart.Data("Dec", 25));

vBox.getChildren().add(lineChart);
// データのセット
lineChart.getData().add(series);

関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜



Java Network URL〜ワンポイントレッスン的な〜

java.net.URLの使い方

private static URL createURL() {
    // URLを指定する
    String targetUrl = "http://zenryokuservice.com/wp/";
    URL url = null;
    URLConnection connect = null;
    try {
        // 文字列のURLからクラスを生成
        url = new URL(targetUrl);
        // 接続する
        connect = url.openConnection();
        // ロードするときの設定を行う
        connect.setRequestProperty("User-Agent", "Mozilla/5.0");
        // 読み込みの設定
        connect.setDoInput(true);
        BufferedReader read = new BufferedReader(new InputStreamReader(connect.getInputStream()));
        sysoutReader(read);
    } catch(MalformedURLException e) {
        e.printStackTrace();
    } catch(IOException ie) {
        ie.printStackTrace();
    }
    return url;
}

これでHTMLファイルをダウンロードできました。

JavaFXで使用するときはこちらもどうぞ。

 

 



JavaFX ボタンのアクション〜イベント処理の実装方法ワンポイントレッスン的な〜

ボタンを押下した時の実装方法

Button viewChangeBtn = new Button("画面切り替え");
viewChangeBtn.setOnKeyPressed(new EventHandler() {
	@Override
	public void handle(KeyEvent event) {
            // イベント処理
	}
});

<注意>

インポートする時に「javafx.scene.input.KeyEvent」ではないawtなどにあるKeyEventをインポートするとビルドエラーが出る。

JavaFXでのボタン関連チュートリアル









Java インターフェース〜Mapの使い方 ワンポイントレッスン的な〜

Mapインターフェースはキーと値をセットにして使用するクラスです(インターフェースクラス)

やっぱりソースで語ります。こんな感じです。

public static void main(String[] args) {
	Map<String, Integer> hashMap = new HashMap<String, Integer>();
	hashMap.put("C", new Integer(3));
	hashMap.put("B", new Integer(2));
	hashMap.put("A", new Integer(1));
	hashMap.forEach(new BiConsumer<String, Integer>() {
		@Override
		public void accept(String t, Integer u) {
			System.out.println("Key: "+ t + " / Value: " + u);
		}
	});;
	Map<String, Integer> linkedMap = new TreeMap<String, Integer>();
	linkedMap.put("C", new Integer(3));
	linkedMap.put("B", new Integer(2));
	linkedMap.put("A", new Integer(1));
	linkedMap.forEach(new BiConsumer<String, Integer>() {
		@Override
		public void accept(String t, Integer u) {
			System.out.println("Key: "+ t + " / Value: " + u);
		}
	});;
}

<実行結果>

昔のMapはTreeMapはコレクション・フレームワーク側でソート(並べ替え)をしてくれていたんだけど、今はHashMappもソートしてくれるようで。。。

ほぼ違いがない、

<ポイント>

Map<キー, 値>で宣言します。キーと値をセットして取り出したり登録したり。。。こんな感じで使用します。Gitにソースをアップしています。



Java インターフェース 〜Listの使い方、ワンポイントレッスン的な〜

イントロダクション

Javaの場合、インターフェースはよく使うもので「List」と「Map」があります。

Listインターフェース

インターフェースは実体を持たないクラスです。。。と記載しても意味がわからないと思います。コードで語りましょう。

public static void main(String[] args) {
  /* 配列(String[]型)のリストList<E>の
   * Eはエレメント(要素)で実際はなんでも良い
   */
  List<String> list1 = new ArrayList<String>();
  // 要素を順番に登録するLinkさせてリストを作ります。
  List<String> list2 = new LinkedList<String>();
}

正直、LinkedListをうまく説明できていないと思います。現状ではとりあえず『「ArrayList」と違うんだな!』と理解していただければ。。。

ArrayListLinkedListを比較してみましたが、結果は変わりませんでした。

テスト実行したソースはGitにアップしました。

早い話

インターフェース(List)を実装しているクラスは全く関係のないクラスだったとしてもListとして使用できるということです。

処理スピードが違うという噂を聞きましたが、この違いは大量データを厚勝つ時にはList, MapよりもHashTableを使用する方が良いと思っているので、考えたことがありませんです。。。


Java クラスの書き方〜ワンポイントレッスン的な〜

ズバリ、このように書きます。

/**
 * クラスのJavaDocの記載をするスペース
 */
public class クラス名 {
   /** フィールド変数 */
   public String field;

  /**
   * メソッドのJavaDo記載スペース
   public static void main(String[] args) {
     // コメント
     System.out.println("Hello World");
     // 変数の宣言
     int num;
     // 変数の初期化(宣言して、値を代入している)
     int suji = 1;
     /*
      * 複数行のコメント
      * 「/**」で始まる場合はJavaDocなので注意
      * 下の「for」で始まるコードはループ文です。
      * 俗にいう「forループ」
      */
      for (int i = 0; i < 10; i++) {
         suji += i;
      }
  }
}

※実際にはEclipseやコマンドプロンプトで「javadoc」コマンドを実行してOracleのホームページにあるようなJavaDocを出力します。

クラスの書き方詳細に関しては以下のリンクを参照してください。

Java Basic Level 1 〜Hello Java〜


Git ヒストリーの見方〜コミットしたソースの変更履歴を見る ワンポイント〜

GitのURLにアクセス

上のキャプチャのように対象ソースを開きます。

右上部分に下のようなものを見つけることができると思います。

この部分にある「History」とか「ヒストリー」と書いてあるボタンを押下

すると上のような画面が見れます、それぞれコミットした時につけた「コミットコメント」が表示されています。

上が比較してみた時のキャプチャです。このページはこちら(Gitで比較)









Java FX〜ワンポイント TextFieldの作り方〜

javafx.scene.control.TextFieldの作り方

テキストフィールドと言っても何個借ります。Swing, AWT, HTMLなど。。。

一応のためパッケージ名から記載します。これなら確実にJavaFXで使用するテキストフィールドです。JavaDocを参照します。

<ソース>

// 1個目の数値、テキストフィールド
TextField text1 = new TextField();
text1.setPrefColumnCount(3); // 必須ではない
text1.setAlignment(Pos.BASELINE_CENTER); // 必須ではない

<これを使用したコード>

public void start(Stage primaryStage) throws Exception {
	// Stageの設定
	primaryStage.setHeight(VIEW_HEIGHT);
	primaryStage.setWidth(VIEW_WIDTH);
	// レイアウトたて
	VBox vBox = new VBox(5);
	// レイアウト横
	HBox hBox = new HBox(8);
	// ラベルの設定
	Label label = new Label();
	// ハローワールドを出力する
	label.setText(myFirstProgram());
	label.setFont(new Font("RobotRegular", 24));
	vBox.getChildren().add(label);

	// 1個目の数値、テキストフィールド
	TextField text1 = new TextField();
	text1.setPrefColumnCount(3);
	text1.setAlignment(Pos.BASELINE_CENTER);
	hBox.getChildren().add(text1);
	// 計算式のラベル
	Label ope = new Label("+");
	hBox.getChildren().add(ope);

	// 2個目の数値、テキストフィールド
	TextField text2 = new TextField();
	text1.setPrefColumnCount(3);
	text1.setAlignment(Pos.BASELINE_CENTER);
	hBox.getChildren().add(text2);

	// 縦のレイアウトに追加する
	vBox.getChildren().add(hBox);
	// ペインの作成
	Group root = new Group();
	root.getChildren().add(vBox);

	// シーンの作成
	Scene scene = new Scene(root, VIEW_WIDTH, VIEW_HEIGHT);
	primaryStage.setScene(scene);
	primaryStage.show();
}

/**
 * JavaFX版のハローワールド実装用のメソッドになります。
 * @return 画面に出力する文字列
 */
public String myFirstProgram() {
	// この「hyoji = ""」を「"hyoji = "Hello World"」と修正してください。
	String hyoji = "Hello World";
	return hyoji;
}

でわでわ。。。