NetBeansでJavaFX開発をする

NetBeansJavaFXのプログラムを作る方法を解説します。

プロジェクトを作る

まずはプロジェクト作成です。「Java with Maven」カテゴリの「FXML JavaFX Maven Archtype(Gluon)」を選んで「Next」を押します。
f:id:nowokay:20200716005904p:plain

いろいろ入力する項目がでますが、とりあえずそのまま「Finish」を押します。
f:id:nowokay:20200716005929p:plain

そうするとプロジェクトの作成が始まります。初回はいろいろとダウンロードが行われるので時間がかかると思います。

NetBeansじゃなくても、次のMavenコマンドで同じプロジェクトが生成できます。

$ mvn -DarchetypeGroupId=com.raelity.jfx \
  -DarchetypeArtifactId=javafx-archetype-fxml-netbeans \
  -DarchetypeVersion=0.0.4 \
  -DarchetypeRepository=https://repo.maven.apache.org/maven2 \
  -DgroupId=kis \
  -DartifactId=mavenproject18fx \
  -Dversion=1.0-SNAPSHOT \
  -Dpackage=kis.mavenproject18fx \
  -Djavafx-version=13 \
  -Djavafx-maven-plugin-version=0.0.4 \
  -Dadd-debug-configuration=Y \
  -Darchetype.interactive=false \
  --batch-mode \
  org.apache.maven.plugins:maven-archetype-plugin:3.1.2:generate"

ファイル構成

生成されたプロジェクトは、こんな感じのファイル構成になってます。
f:id:nowokay:20200716010611p:plain

App.javaは起動ファイル。
画面がPrimaryとSecondaryが切り替わるというプログラムになっているので、それぞれのコントローラがあります。
あと、Other SourcesのほうにFXMLファイルがあって、ここで画面が定義されています。
あとはプロジェクト構成のPOMファイルがありますね。

module-info.javaはモジュール定義ファイルなのですが、慣れないうちは あとあとハマりがちなので、消しておいたほうがいいです。

実行してみる

プロジェクトを右クリックして、メニューから「Run」を選ぶと実行できます。 f:id:nowokay:20200716010632p:plain

コマンドではjavafx:runで実行できます。

$ mvn javafx:run

実行すると次のような画面が出ます。
f:id:nowokay:20200716010658p:plain

ボタンを押すと次の画面に切り替わります。
f:id:nowokay:20200716010712p:plain

SceanBuilderの導入

それではちょっと画面をいじってみましょう。
画面定義はFXMLファイルに記述されているので、このファイルを書き換えればいいのですが、やはりビジュアルエディタで操作したい。
f:id:nowokay:20200716012443p:plain

JavaFXではScene Builderというツールが用意されているので、このツールをインストールします。
ダウンロードは次のサイトで行えます。
Scene Builder - Gluon f:id:nowokay:20200716011202p:plain

NetBeansの「Tools > Option」で設定を開いて、「Java」の中の「JavaFX」タブでScene Builderをインストールした場所を設定します。
f:id:nowokay:20200716011524p:plain

これでFXMLファイルをダブルクリックするとScene Builderが開くようになるんですが、メニューが文字化けしています。
f:id:nowokay:20200716011734p:plain

ここではメニュー操作は行わないのでそのままにしていてもいいんですが、目障りでもあります。
とりいそぎ、英語設定にしておきます。
Scene Builderをインストールしたフォルダの下のAppフォルダにSceneBuilder.cfgというファイルがあるので、これを編集してJVMオプションの項目に-Duser.language=enを追加します。

[JVMOptions]
--add-opens
javafx.fxml/javafx.fxml=ALL-UNNAMED
-Duser.language=en

ただ、恐らくパーミッションがなくて保存できないので、どこか別のところで保存して上書きコピーするか、Usersに変更のパーミッションを設定します。
f:id:nowokay:20200716011925p:plain

そうすると、メニューが英語で表示されるようになりました。
f:id:nowokay:20200716011613p:plain

日本語で表示したい場合には、検索するといろいろ出てくるのでそこの手順に従うといいと思います。
SceneBuilder 11 の文字化けを直す - Qiita

やってることは同じですが、コマンドからJarファイルを操作して対処するほうが正統っぽいやりかたです。 SceneBuilder 11で日本語が文字化けする事象の修正方法 - タツノオトシゴのブログ

ボタンを置いてみる

Scene Builderが使えるようになったので、ボタンを配置してみましょう。
ControlsからButtonを選んで一番下においてみます。
f:id:nowokay:20200716012531p:plain

保存してFXMLファイルを確認するとButtonが追加されているのがわかります。
f:id:nowokay:20200716012605p:plain

実行するとボタンが表示されていますね。ただ、ここではボタンを押してもなにも起きません。
f:id:nowokay:20200716012630p:plain

ということで、ボタンを押したときの処理として次のようなメソッドをPrimariController.javaに追加します。

    @FXML
    private void buttonAction() {
        System.out.println("Hello");
    }

そうすると、Scene BuilderでOn Actionに設定できるようになります。
f:id:nowokay:20200716012836p:plain

FXMLはこんな感じになります。
f:id:nowokay:20200716012921p:plain

実行すると、ボタンを押したときにHelloとコンソールに表示されるようになりました。
f:id:nowokay:20200716012949p:plain

コンポーネントの操作

最後に、コンポーネントから値を読み取ったり値を設定したり、コンポーネントの操作を行ってみます。

TextFieldとTextAreaを置いてみます。
f:id:nowokay:20200716024503p:plain

TextFieldとButtonを横に並べたいのだけど、全体がVBOXになっているので、ここにHBOXをいれて横にコンポーネントが並べれるようにしています。
f:id:nowokay:20200716024549p:plain

TextFieldとTextAreaを扱うフィールドを追加して、@FXMLアノテーションを付けておきます。

    @FXML
    private TextField textField;
    
    @FXML
    private TextArea textArea;

importなどはこんな感じになります。ctrl+shift+i で補完できます。 f:id:nowokay:20200716024754p:plain

そうするとScene Builderのほうでfx:idに設定できるようになります。対応するものを設定します。
f:id:nowokay:20200716025031p:plain

ボタンを押したときの処理を書き換えます。

    @FXML
    private void buttonAction() {
        textArea.appendText(textField.getText() + "\n");
    }

実行すると、テキストフィールドになにか入力してボタンを押すとテキストエリアに表示されるようになりました。
f:id:nowokay:20200716025917p:plain

ということで、あとはいろいろコントロールを追加したり処理を追加したりしてアプリケーションを作っていくことになりますね。

せんたっきを買った

せんたっき、壊れてしばらくたっていた。

けど、せんたっきの通り道に棚を置いてたりして、せんたっき様の通り道がなかったので、片付けるまで買えないってことになっていた。

なので、しばらくコインランドリー通いだったんだけど、2時間かかるし、それで洗濯の間隔があいて旅行前に服がないとか、やっぱかなり不便だった。

で、主に邪魔になっていた本の山がちくちくと裁断スキャンして片付いたのと、このたびおうち生活が長くなって部屋が片付いて、7年ごしにようやく せんたっき様が通れるようになったので、買った。
キャッシュレス還元が終わるので6月中に買いたいなと思っていたら、ちょうど新機種も出たところで、旧機種が安くなっていた。 f:id:nowokay:20200715201654p:plain

せんたっき、結構重くて、ひとりでは運べないと思っていたのでふたりで運ぶかなと思っていたら、おにいさんがひとりで軽々と運んでいたのが驚きであった。あれひとりで持てるもんなんやな。 そんで、設置までしてもらったら、しばらく使ってなかった排水溝がつまってたりしてせんたっき稼働できなかったんだけど、クラシアンに来てもらって使えるようになった。

まあ、洗剤いれてセットしわすれたりもしたけど、家にせんたっきあるのはとてもいい。

コインランドリー通いだと、頻度を減らすためにそれなりにパンツとか靴下とかのストックが必要で、ちょっとヨレヨレとかは捨てずにおいたんだけど、頻繁に洗濯できるようになったのでハズレと感じていた靴下やパンツなどを全部捨てれたのもよい。

コインランドリー、こういうこともあったりして嫌いではなかったのだけど、やっぱり単純にめんどい。

乾燥機つきにしたんだけど、頻度たかければ量が少ないので干すのも手間ではなくて、まだ一回しか使っていない。 冬になったら使うかもな。

一人暮らしならトイレのドアを閉めては いけない

一人暮らしならトイレのドアを閉めては いけないし、トイレのドアの前に段ボールなど立てかけてはいけない。
トイレのドアが開かなくなったら死ぬ。

「トイレ 閉じ込め」で検索すると事例が結構でてくるけど、通話中であったり同居人に助けられたり約束していた人が110番してくれていたり、だいたい他者によって助けられている。

あと、助かった人はおもしろおかしくツイートしてバズるのだけど、おそらく亡くなった人はツイートしないので広まりにくい。

こういうの見ると怖い。

近所のマンションでトイレに閉じ込められての死亡事故がありました。独身のサラリーマンの方で、会社も欠勤し電話も出ないため、まさかトイレに閉じ込められていたことは想定外だったようです。

https://qa.itmedia.co.jp/qa9578401.html

携帯を持って入ればいいのだけど、こういう事故というのは たまたま携帯もってないときに起こる。
ということでトイレのドアは閉めないほうがいいのだけど、うっかり閉まってしまいその拍子に壊れる、みたいなことも考えられなくはない。

で、対策として工具を常備すればいいというのがあるけど、トイレのドアを壊せる工具は結構おおげさなものになる。
ということで、笛を置いておくのが一番コスト安で死ぬ危険性は減らせるんじゃないだろうか。

笛があったとこで、どうやって外に知らせるかと考えるとモールスがよさそう。 SOSはわかりやすい。

・・・---・・・

TOILETならこう。

- --- ・・ ・-・・ ・ -

いまは笛がないので、とりいそぎソプラノサックスのマウスピースを置いている

2023/1/24 追記 ブコメにある、トイレで夫婦死亡というのはこの話。ちなみに、そんな高齢ではなく、40代夫と50代妻の夫婦
トイレの内外で夫婦怪死!巨漢夫ドアの前で急死、閉じ込められた妻は熱中症: J-CAST テレビウォッチ

LeetCodeを解いてみる配信 2020-07-07

LeetCodeを解く配信をした
https://www.youtube.com/watch?v=BbpOyov5ib0www.youtube.com

飲んでたノンアルコールビールはこれ

XORしていく

XOR Operation in an Array - LeetCode
動画は1:52から。

startとnが与えられるので、start + i * 2をどんどんXORしていく。
問題をそのまま書いたら解けた感じ

四角を塗っていく

Subrectangle Queries - LeetCode 動画は8:12から。

二次元配列が与えられて、左上と右下と値が与えられるのでその範囲を新しい値で更新していく。
Mediumのくせにやたら簡単だったので、評価が低い。 最初は二重ループでやって、遅いしメモリも食ってることでArrays.fillを使ったんだけど、そんなに改善しないのであきらめ。

小さい数字を数える

How Many Numbers Are Smaller Than the Current Number - LeetCode
動画は22:40から。

数値の配列が与えられるので、それぞれの要素についてそれより小さい数値がいくつあるか数える。
最初は素直に二重配列にしたんだけど、やっぱりかなり遅かったんで、まずは単純にキャッシュした。
それでもそこまで速くならなかったので、最初にそれぞれの数値を数えて、あらかじめ各数値についてそれより少ない数がいくつかるかを計算するようにした。
そうすると速くはなったんだけど、メモリを食うってことになった。改善点思いつかんかったので、そこで終了

microKEY 2がWindowsの休止から復活後に認識されないのは電源不足

DTM用の鍵盤としてmicroKEY 2を使っているのだけど、休止状態にして復帰したときに認識されなくなっているということがよくあった。
こうなると再起動するまでダメなので結構不便。
f:id:nowokay:20200703124257p:plain

で、ドライバを入れなおしたりいろいろ試行錯誤をしていたのだけど、どうも電源が不足しているぽい。
ということで、USB2ではなくUSB3につなぐことで解決したような気がする。

ちなみに、鍵盤はnanoPADと一緒に引き出しに置いている。
この引き出しはサンワサプライの70cm幅のキーボードスライダー100-KB003なんだけど、机の上端から15cmくらいになってヒザがあたるので、角度調節付きの100-KB005のクランプを使っている。KB005だと幅が足りない。

ということでKB003のクランプとKB005のトレーが余っているので、欲しい人は声かけてください。



rFactor 2が起動しない / rFactor 2 won't launch

rFactor 2というレーシングシミュレータがあるんだけど起動しなかった。
rFactor 2 that is a racing simulator won't launch.

この「プレイ」ボタンを押すと「停止」に変わるんだけど、しばらくするとなにも言わずに1秒くらいで「プレイ」に戻る。
After pushing 'Play' button, it will change 'Stop' but 1 sec later, it returns 'Play' with no message. f:id:nowokay:20200702231259p:plain

SteamLibraryフォルダの下にsteamapps\common\rFactor 2\Launcher\Launch rFactor.exeという実行ファイルがあったので起動して確認してみる。
そうすると、「MSVCR110.dllが見つからないため、コードの実行を続行できません。~」というエラーが出た。
Under the SteamLibrary folder there is an exe file named `steamapps\common\rFactor 2\Launcher\Launch rFactor.exe, launch the file.
Then, I get an error 'The Program can't start because MSVCR110.dll is missing...'. f:id:nowokay:20200629122911p:plain

調べてみると、ここから「Visual C++ Redistributable for Visual Studio 2012」をダウンロードすればいいらしい。
After googling I get an information that says downloading 'Visual C++ Redistributable for Visual Studio 2012' from the link below is a solution.
https://www.microsoft.com/en-us/download/details.aspx?id=30679

Downloadボタンを押すといくつか候補がでるので、「VSU_4\vcredist_x86.exe」にチェックを入れてNextボタンを押すとダウンロードできる。
Pushing 'Download' button shows file list, you must check 'VSU_4\vcredist_x86.exe' and push 'Next', download will start.
f:id:nowokay:20200702232406p:plain

これをインストールすると無事起動できた。
I got it after installing it. f:id:nowokay:20200702232635p:plain

しかしrFacotr 2は車の挙動のシミュレーションはすごいんだけど、インターフェイスがめちゃ素っ気なくて、ほんとにガチ勢向けだなという雰囲気。
BTW, rFactor 2's simulation of vehcle's behavior is great, but the interface is dreary. It seems it is for hardcores.

Javaを勉強するための環境設定(NetBeans版)

はじめに

NetBeansを使ってJavaの勉強をはじめるという人むけの環境設定の解説です。
インストールするものは2つです。

Java環境のインストール

NetBeansJavaで動くのと、そもそも目的がJavaの勉強なんで、Javaのインストールが必要です。

AdoptOpenJDKのダウンロード

Javaには様々なディストリビューションがありますが、次の理由からここではAdoptOpenJDKを使います。
https://adoptopenjdk.net/

  • 最新バージョンがある
  • 様々な用途でライセンス上 問題なく使える
  • インストーラがある(環境変数などの設定が不要)
  • サイトで迷いにくい

JavaはOpenJDKとしてオープンソースで開発されているのですが、AdoptOpenJDKはOpenJDKをビルドしてインストーラなどをつけて配布するプロジェクトです。
サイトに行くと、ブラウザからOSを判別してくれているのですが、バージョンが11になっているので、ここでは最新の14にしておきましょう。
f:id:nowokay:20200621084228p:plain

AdoptOpenJDKのインストール

ダウンロードしたファイルを起動するとインストールが始まります。
ライセンスの確認がありますが、OpenJDKがGPL v2ベースのライセンスなので、AdoptOpenJDKも同様にGPL v2になっています。
GPL v2はいろいろなところで出てくるライセンスなので、一度は内容を確認しておいたほうがいいですが、ソフトウェアを使うだけであれば特に気にする部分はないと思います。
f:id:nowokay:20200621085522p:plain

次にいろいろな設定が出ます。ここで、3番目の「Set JAVA_HOME...」は選択しておいたほうがいいでしょう。
f:id:nowokay:20200621085601p:plain

インストール確認

インストールが終わったら、インストールされているか確認してみましょう。
Windowsシステムツール」から「コマンドプロンプト」を選んで、コマンドプロンプトを立ち上げます。
ここで「java」と入力してEnterキーを押したときにいろいろ出てくれば、Javaが正しくインストールされています。 f:id:nowokay:20200621092222p:plain

java -version」と入力するとバージョン情報が表示されて、Java 14であることやAdoptOpenJDKの実行ファイルであることが確認できます。
f:id:nowokay:20200621092521p:plain

NetBeansのインストール

さて、ではNetBeansをダウンロード、インストールしましょう。

NetBeansのダウンロード

NetBeansのダウンロードはここからできます。
https://netbeans.apache.org/download/index.html
いまの最新版は12なので、これをダウンロードします。
f:id:nowokay:20200621100236p:plain

今回はインストーラ付のバイナリをダウンロードします。
f:id:nowokay:20200621100432p:plain

そうするとまたたくさんリンクが現れて面食らうのですが、一番上にあるおすすめサイトを選ぶといいと思います。
f:id:nowokay:20200621101442p:plain

NetBeansのインストール

ダウンロードしたファイルを実行するとインストールが始まります。
f:id:nowokay:20200621102845p:plain

PHP開発をする予定のない人は、PHPはずしていいと思います。そのほかは残しておきましょう。
f:id:nowokay:20200621102925p:plain

NetBeansApacheライセンスになっています。これもよく出てくるライセンスなので一度は ちゃんと読んでおいたほうがいいですが、使う分には特に問題ないと思います。
f:id:nowokay:20200621103009p:plain

インストール場所は、特にこだわりがなければそのまま。
f:id:nowokay:20200621103230p:plain

アップデートのチェックはそのままでいいと思います。 f:id:nowokay:20200621103248p:plain

これでインストールが始まります。

NetBeansの起動

デスクトップに置かれたアイコンなどからNetBeansが起動できます。

NetBeansは「プロジェクト」という単位でプログラムを管理します。
ツールバーの2番目にある「New Project」ボタンを押すと新しいプロジェクトが作れます。
f:id:nowokay:20200621110305p:plain

プロジェクトの種類を選ぶダイアログが出ますが、そのまま「Java with Maven」の「Java Application」を選びます。
f:id:nowokay:20200621110525p:plain

初回はJava開発用の機能をアクティベートする必要があります。 JavaFXにチェックが入ってますが、当面必要ないのではずしておきましょう。このチェックを入れなくてもJavaFXアプリケーションの開発は可能です。
f:id:nowokay:20200621111240p:plain

アクティベートが終わるとプロジェクト名などを入力するダイアログが出ます。とりあえずそのままFinishしましょう。それぞれの意味は勉強が進んでから知っていけばいいと思います。
f:id:nowokay:20200621111505p:plain

プロジェクトが生成されると、このようになります。
f:id:nowokay:20200621112209p:plain

「Source Package」の中の「com.mycompany...」で右クリックしてメニューから「New > JFrame Form」を選びます。(JPanel Formではない)
f:id:nowokay:20200621112259p:plain

JFrame Form作成ダイアログが出ますが、とりあえずそのままFinishしましょう。
f:id:nowokay:20200621112518p:plain

こんな感じでフォームエディタが開きます。中央にフォームデザイン、右にコンポーネントパレットが表示されています。
f:id:nowokay:20200621112657p:plain

コンポーネントパレットのSwing Controlsの2番目にある「JButton」をクリックします。 f:id:nowokay:20200621113005p:plain

そうしたら、フォームの適当なところをクリックして配置します。
f:id:nowokay:20200621113206p:plain

配置したボタンをダブルクリックします。
f:id:nowokay:20200621115230p:plain

そうするとボタンが押されたときの処理を記述するコードが生成されます。
f:id:nowokay:20200621115402p:plain

sout と入力して[tab]を押すとSystem.out.printlnが入力されます。
f:id:nowokay:20200621115442p:plain

ダブルクォートの間にカーソルがあるので、そのまま「Hello!」と入力します。
f:id:nowokay:20200621115538p:plain

それでは実行してみましょう。
エディタ上で右クリックして、メニューから「Run File」を選びます。
f:id:nowokay:20200621115721p:plain

ビルドが行われます。初めての場合にはいろいろなダウンロードが行われるので、しばらく待つ必要があります。
f:id:nowokay:20200621115836p:plain

ウィンドウが表示されました。
f:id:nowokay:20200621115927p:plain

ボタンを押すとOutputウィンドウに「Hello!」と表示されるはずです。
f:id:nowokay:20200621120023p:plain

これでJavaのプログラムを組んで動かすことができました。
それでは、Javaの勉強がんばってください。 f:id:nowokay:20200621120446p:plain