Stage常用属性

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);//调整窗口透明度,范围(0,1)
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) {
// TODO Auto-generated method stub
System.out.println("当前高度:"+newValue.doubleValue());
}
});

//动态获取高度
primaryStage.widthProperty().addListener(new ChangeListener<Number>() {

public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
// TODO Auto-generated method stub
System.out.println("当前宽度:"+newValue.doubleValue());
}
});

//动态获取窗口左上角X坐标
primaryStage.xProperty().addListener(new ChangeListener<Number>() {

public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
// TODO Auto-generated method stub
System.out.println("窗口X坐标:"+oldValue+"-->"+newValue);
}
});

//动态获取窗口左上角Y坐标
primaryStage.yProperty().addListener(new ChangeListener<Number>() {

public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
// TODO Auto-generated method stub
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 {
// TODO Auto-generated method stub
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);//S0,默认显示格式
s.get(1).initStyle(StageStyle.TRANSPARENT);//s1,透明格式
s.get(2).initStyle(StageStyle.UNDECORATED);//s2,
s.get(3).initStyle(StageStyle.UNIFIED);//s3,
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;
/**
* 模态化窗口演示
* @author 00
*
*/
public class Demo0403 extends Application{

public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
// TODO Auto-generated method stub
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();
}

}