Stage是设置窗口最外面那个大框框的类,关于那个大框框能有什么内容呢?
一个Stage
每一个Stage
的对象,我们都可以谈论标题、小图标、总在桌面前显示、大小是否可以拖动、默认最大化、默认最小化、窗口宽高、窗口(左上角为基准)位置,透明度,关闭窗口。所以下面是他们的实现:
注意下面代码中图片的路径为相对路径,我实际在项目下面新建了一个attach包,将p1.jpg放在了包下面。
1 2 3
| primaryStage.setTitle("标题"); primaryStage.getIcons().add(new Image("/attach/p1.jpg"));
|
下面是一些窗口的大小设置,首先是最大最小的那种
1 2 3
| primaryStage.setIconified(true); primaryStage.setMaximized(true); primaryStage.close();
|
有时候我们希望窗口的大小固定,不要被改变,或者变透明一点,然后总是在最前面
1 2 3
| primaryStage.setResizable(false); primaryStage.setOpacity(0.6); primaryStage.setAlwaysOnTop(true);
|
当想要知道窗口坐标的时候,实现是这样
1 2 3 4 5 6 7 8 9 10 11 12
| primaryStage.setResizable(false);
primaryStage.setWidth(500); primaryStage.setHeight(500);
System.out.println("宽度 = "+ primaryStage.getWidth()); System.out.println("高度 = "+ primaryStage.getHeight());
primaryStage.setX(200); primaryStage.setY(50);
|
上面的方法只能得到初始的坐标,要实时的坐标需要使用一下方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| primaryStage.heightProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { System.out.println("当前高度:"+newValue.doubleValue()); } });
primaryStage.widthProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { System.out.println("当前宽度:"+newValue.doubleValue()); } });
primaryStage.xProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { System.out.println("窗口X坐标:"+oldValue+"-->"+newValue); } }); primaryStage.yProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { System.out.println("窗口Y坐标:"+oldValue+"-->"+newValue); } });
|
多个Stage
首先多个窗口时如果使用stage.close()
一个个关闭窗口太过于麻烦,可以采用Platform.exit()
一次性关掉所有窗口。
StageStyle展示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| import java.util.ArrayList;
import javafx.application.Application; import javafx.application.Platform; import javafx.stage.Stage; import javafx.stage.StageStyle;
public class Demo0402 extends Application{ public static void main(String[] args) { launch(args); }
@Override public void start(Stage primaryStage) throws Exception { ArrayList<Stage> s=new ArrayList<Stage>(4); int iVar=0; s.add(new Stage()); s.add(new Stage()); s.add(new Stage()); s.add(new Stage()); s.add(new Stage()); for(Stage ss:s) {ss.setTitle("s"+(iVar++));} s.get(0).initStyle(StageStyle.DECORATED); s.get(1).initStyle(StageStyle.TRANSPARENT); s.get(2).initStyle(StageStyle.UNDECORATED); s.get(3).initStyle(StageStyle.UNIFIED); s.get(4).initStyle(StageStyle.UTILITY); for(Stage ss:s) {ss.show();} Platform.exit(); }
}
|
还有一个好玩的东西,学名是模态化窗口,就是只能在这个窗口编辑或者干掉这个窗口后才能在其它窗口编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| import javafx.application.Application; import javafx.stage.Modality; import javafx.stage.Stage;
public class Demo0403 extends Application{
public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { Stage s1=new Stage(); s1.setTitle("S1"); s1.show(); Stage s2=new Stage(); s2.initOwner(s1); s2.setTitle("S2"); s2.initModality(Modality.WINDOW_MODAL); s2.show(); Stage s3=new Stage(); s3.setTitle("S3"); s3.show(); }
}
|