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");
}

<実行結果>

[rakuten ids="dtc:11465875"]

関連ページ一覧

  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 〜グラフを描く、ワンポイントレッスン的な〜

JavaFX LineCharクラスを使う

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

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

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

ポイントは以下のように、縦軸と横軸の内容を定義(区別)しているところだと思います。CSVなどデータを読み込んでそれを表示するときに便利です。

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ファイルをダウンロードできました。


関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

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

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

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

<注意>

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

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

[rakuten ids="nakayama-shiki:10000103"]









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

Mapインターフェース

Mapインターフェースはキーと値をセットにして使用するクラスです(インターフェースクラス)
Listインターフェースと同じように、MapインターフェースをimplementsしているクラスをMap型の変数で扱うことができます。

JSなどで「連想配列」などと呼ばれているものと似ています。しかし別物です。使い方は、putメソッドで値をセット、getメソッドで取得するといった形で使用します。下の動画は、Mapインターフェースの使い方を実行してみたものです。

コードはこんな感じです。

        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);
            }
        });

<実行結果>

Key: A / Value: 1
Key: B / Value: 2
Key: C / Value: 3
Key: A / Value: 1
Key: B / Value: 2
Key: C / Value: 3

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

ほぼ違いがない、

<ポイント>

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

Mapインターフェースの実装クラスの一つ「」の操作を行ってみました。Hashtableクラスの実装でもあります。