3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JavaFX - ノードの表示と領域の占有を同期させる

Posted at

やりたいこと

例えば、あるノードの表示・非表示を動的に切り替えるときに、何も考えずに次のように実装したとする。

javafx.jpg

package sample.javafx;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;

import java.net.URL;
import java.util.ResourceBundle;

public class MainController implements Initializable {
    @FXML
    private CheckBox checkbox;
    @FXML
    private Label hogeLabel;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        hogeLabel.visibleProperty().bind(checkbox.selectedProperty());
    }
}

チェックボックスの選択と、 Hoge ラベルの表示を連動させている。

実行結果

javafx.gif

Hoge ラベルが非表示になっても、 Fuga ラベルの位置はそのままになっている。
Hoge ラベルは見えなくなっているだけで、その領域を依然として占有した状態になっている。

これを、 Hoge ラベルが消えたら Fuga ラベルが上に詰まるようにしたい。

やり方

package sample.javafx;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;

import java.net.URL;
import java.util.ResourceBundle;

public class MainController implements Initializable {
    @FXML
    private CheckBox checkbox;
    @FXML
    private Label hogeLabel;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        hogeLabel.visibleProperty().bind(checkbox.selectedProperty());
        hogeLabel.managedProperty().bind(hogeLabel.visibleProperty());
    }
}

実行結果

javafx.gif

説明

hogeLabel.managedProperty().bind(hogeLabel.visibleProperty());

managed プロパティを false にすれば、レイアウトの管理対象から外れ、領域の占有がなくなる。
なので、 managed プロパティと自身の visible プロパティを連動させれば、目的の動作を実現できる。

参考

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?