-
Bug
-
Resolution: Fixed
-
P4
-
7u9
-
Java 1.7.0_09, Windows 7 64.
While you can change resizing behavior of a stage using Stage.setResizable() you cannot do that using Stage.resizableProperty().set(). Probably related problem is that binding to resizableProperty has no effect.
Here is a sample program that illustrates that is below. You can resize a window only when "resizable" check box is set, not when only "resizableProperty" is set:
{code}
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.GroupBuilder;
import javafx.scene.Scene;
import javafx.scene.SceneBuilder;
import javafx.scene.control.CheckBox;
import javafx.scene.control.CheckBoxBuilder;
import javafx.scene.layout.VBoxBuilder;
/**
* Test resizing behaviour of a stage using Stage.setResizable() and Stage.resizableProperty().set().
*/
public final class ResizablePropertyBug extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(final Stage stage) {
final CheckBox checkBoxResizable = CheckBoxBuilder.create()
.text("resizable")
.build();
final CheckBox checkBoxResizableProperty = CheckBoxBuilder.create()
.text("resizableProperty")
.build();
final Scene scene = SceneBuilder.create()
.width(270)
.height(370)
.root(GroupBuilder.create()
.children(
VBoxBuilder.create()
.layoutX(30)
.layoutY(20)
.spacing(10)
.children(
checkBoxResizable,
checkBoxResizableProperty
)
.build()
)
.build()
)
.build();
stage.setResizable(checkBoxResizable.selectedProperty().getValue());
stage.resizableProperty().set(checkBoxResizableProperty.selectedProperty().getValue());
// checkBoxResizableProperty.selectedProperty().bindBidirectional(stage.resizableProperty());
checkBoxResizable.selectedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
stage.setResizable(checkBoxResizable.selectedProperty().getValue());
}
});
checkBoxResizableProperty.selectedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
stage.resizableProperty().set(checkBoxResizableProperty.selectedProperty().getValue());
}
});
stage.setScene(scene);
stage.setTitle("Stage resizableProperty test");
stage.show();
}
}
{code}
Here is a sample program that illustrates that is below. You can resize a window only when "resizable" check box is set, not when only "resizableProperty" is set:
{code}
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.GroupBuilder;
import javafx.scene.Scene;
import javafx.scene.SceneBuilder;
import javafx.scene.control.CheckBox;
import javafx.scene.control.CheckBoxBuilder;
import javafx.scene.layout.VBoxBuilder;
/**
* Test resizing behaviour of a stage using Stage.setResizable() and Stage.resizableProperty().set().
*/
public final class ResizablePropertyBug extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(final Stage stage) {
final CheckBox checkBoxResizable = CheckBoxBuilder.create()
.text("resizable")
.build();
final CheckBox checkBoxResizableProperty = CheckBoxBuilder.create()
.text("resizableProperty")
.build();
final Scene scene = SceneBuilder.create()
.width(270)
.height(370)
.root(GroupBuilder.create()
.children(
VBoxBuilder.create()
.layoutX(30)
.layoutY(20)
.spacing(10)
.children(
checkBoxResizable,
checkBoxResizableProperty
)
.build()
)
.build()
)
.build();
stage.setResizable(checkBoxResizable.selectedProperty().getValue());
stage.resizableProperty().set(checkBoxResizableProperty.selectedProperty().getValue());
// checkBoxResizableProperty.selectedProperty().bindBidirectional(stage.resizableProperty());
checkBoxResizable.selectedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
stage.setResizable(checkBoxResizable.selectedProperty().getValue());
}
});
checkBoxResizableProperty.selectedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
stage.resizableProperty().set(checkBoxResizableProperty.selectedProperty().getValue());
}
});
stage.setScene(scene);
stage.setTitle("Stage resizableProperty test");
stage.show();
}
}
{code}