2016年7月30日土曜日

[実装メモ]setScrollTop()を使いたければAppendTextはだめ


AppendText()を利用してTextAreaにsetScrollTop()を利用するとAppendText()のせいでうまく適用されない.
(参考ページではdelayと表現されている)
なので, setText()を用いて以下のように書く

TextArea hogehoge = new TextArea();
hogehoge.setText("First Line);
hogehoge.setText(hogehoge.getText() + "Second Line");

これでdelayがなくなり, setScrollTop()を利用できるようになる.

参考
https://bugs.openjdk.java.net/browse/JDK-8134661

2016年7月25日月曜日

[実装メモ] JavaFXにてcanvasの内容を消す方法

GUIプログラミングで描画系命令はちゃんとリセットしてあげないと残ったままでカオスになる.
JavaFXでも同様である.

canvasの内容を消すには以下のようにする.

Canvas canvasname;
GraphicsContext gc = canvasname.getGraphicsContent2D();

gc.clearRect(0,0, canvasname.getWidth(), canvas.getHeight());

このようにするとcanvasが真っ白になる.


参考
http://stackoverflow.com/questions/27203671/javafx-how-to-clear-the-canvas

[実装メモ] JavaFXのTextAreaで1行の高さを取りたい時

JavaFXでテキストエリアを装飾したいときなど1行の高さを知りたい時のメモ


//TextAreaの準備
TextArea hogehoge = new TextArea();
hogehoge.appendText("test");

//TextAreaのテキストがある部分の高さをのみを持ってくる
Text text = (Text)hogehoge.lookup(".text");
Double textHeight = text.getBoundsInLocal().getHeight();

こうすることでテキストエリアではなくテキストエリアのテキストがある部分の高さを持ってこれる.
これを行数で割れば1行の高さを求めることができる.

これで環境に依存することなくテキストエリアを装飾することが可能になる.


/*
開発環境のMBPでは1行が17px, 利用者の環境の想定となるUbuntuは13pxだった
lookupメソッドの存在と引数がわからんとどうにもうまくできんぞこれ…
*/


参考ページ
http://stackoverflow.com/questions/27818470/javafx-get-line-height-of-textarea