はてなにお布施の時期が過ぎていたので、ついでにはてなブログに移行してみました。プロの値段…高いよ………。
さて、そんなこんなで、今日もJavaFXネタ。
RadioButtonって複数のRadioButtonを並べて表示するって使い方が普通の場面だと思う。でも、これをするには
- 複数のRadioButtonを用意して
- ToggleGroupを用意して
- ToggleGroupにRadioButtonを追加して
- レイアウト用PaneにRadioButtonを代入して
- ToggleGroupのselectedToggleプロパティを監視して必要な値に変換させる
ってな感じで面倒くさい。
というわけで、もうどっかにあるんだろうけど、この手順を簡略化するクラスを作ってみました。(長いので続きに。もしくはToggleButtons.java)
で、それを使うと以下のように短く書けます。
//importは略 public class Test extends Application{ public static void main(final String[] args){launch(args);} @Override public void start(final Stage primaryStage) throws Exception{ final String[] fileList={"None Selected", "Lenna","Mandrill","Aerial","Earth","Girl","Parrots","Pepper","Siboat"}; final ToggleButtons buttons = new ToggleButtons(); //画像付きRadioButtonを追加 for(int i=1;i<fileList.length;i++){ final String fname = fileList[i]; buttons.createItem(fname,Test.class.getResourceAsStream(fname+".jpg")); } //選択されているToggleButtonは数値になっている buttons.selectedProperty().addListener(new InvalidationListener(){ @Override public void invalidated(final Observable observable){ System.out.println(fileList[buttons.getSelected()+1]); } }); primaryStage.setScene(new Scene(buttons.asFlowPane())); primaryStage.show(); } }
実行するとこんな感じ