--- 【追記】 ---
問題があった。
nodeにTileを渡したとして、Tileの中身を変えると画面が真っ白になる。
原因がまだわからない。
下のコードはバグ入りです。
原因わかったら、修正しようと思います。
---【追記ここまで】------------
スクロールパネルで悩むのは、これで最後にしたいよ。
ScrollBar と、ClipView を組み合わせて作ってみた。
node に、スクロールさせたいNodeを入れる。
width,height に、スクロールで見れるパネルの大きさを指定。
下のコードだと、縦にしかスクロールバーが出ないけど、とりあえず置いときます。
後でコードの直しとかやったら、またコードを上げます。
import javafx.scene.CustomNode;
import javafx.scene.Node;
import javafx.scene.control.ScrollBar;
import javafx.scene.layout.ClipView;
import javafx.scene.layout.LayoutInfo;
import javafx.scene.layout.HBox;
public class ScrollPane extends CustomNode{
public var node : Node;
public-init var height : Number;
public-init var width : Number;
var vertical : Boolean = true;
def SCROLL_BAR_MIN = 1;
def NOT_SCROLL = -1;
var scrollBarValue : Number = SCROLL_BAR_MIN on replace{
node.layoutY = -scrollBarValue;
};
def scrollBar : ScrollBar = ScrollBar {
min: SCROLL_BAR_MIN
max: bind if( node.boundsInLocal.height <= height ) NOT_SCROLL else node.boundsInLocal.height - height
vertical : vertical
value: bind scrollBarValue with inverse
layoutInfo: LayoutInfo{ height: height }
}
var clipView : ClipView = ClipView{
pannable: false
node: bind node
layoutInfo: LayoutInfo{
width: width - scrollBar.width
height: height
}
}
public override function create() : Node{
return HBox{ content:[ clipView, scrollBar ] };
}
}