1.Stage
舞台
如此这样的一个框框,舞台只是这个框框,并不管里面的内容
public void start(Stage primaryStage) throws Exception {
primaryStage.setScene(new Scene(new Group()));
primaryStage.getIcons().add(new Image("/icon/img.png")); //更换舞台角标
// primaryStage.setIconified(true); //设置最小化
// primaryStage.setMaximized(true); //设置最大化
// primaryStage.close(); //关闭
primaryStage.setWidth(500);
primaryStage.setHeight(500); //舞台大小
primaryStage.heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number t1) {
System.out.println("当前高度:" + t1.doubleValue());
}
}); //监听这个舞台的高度(可以通过这个,进行改变里面的控件的大小),宽度同理
// primaryStage.setFullScreen(true); //设置全屏(不同于最大化)
// primaryStage.setResizable(false); //固定舞台大小
primaryStage.show();
模态...
源代码:
package Test; import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.stage.Stage; import javafx.stage.StageStyle; public class Test extends Application { public static void main(String[] args) { launch(); } @Override public void start(Stage primaryStage) throws Exception { primaryStage.setScene(new Scene(new Group())); primaryStage.getIcons().add(new Image("/icon/img.png")); //更换舞台角标 // primaryStage.setIconified(true); //设置最小化 // primaryStage.setMaximized(true); //设置最大化 // primaryStage.close(); //关闭 primaryStage.setWidth(500); primaryStage.setHeight(500); //舞台大小 primaryStage.heightProperty().addListener(new ChangeListener<Number>() { @Override public void changed(ObservableValue<? extends Number> observableValue, Number number, Number t1) { System.out.println("当前高度:" + t1.doubleValue()); } }); // primaryStage.setResizable(false); //固定舞台大小 // primaryStage.setFullScreen(true); //设置全屏 primaryStage.initStyle(StageStyle.UNIFIED);//unified 没有详细的边框 primaryStage.initStyle(StageStyle.DECORATED);//默认窗口 primaryStage.setOpacity(0.5); //透明 // primaryStage.setAlwaysOnTop(true); //窗口始终在最前 primaryStage.show(); } }
2.scene
设置光标:
public void start(Stage primaryStage) throws Exception {
Scene scene = new Scene(new Group());
scene.setCursor(Cursor.CLOSED_HAND); //设置鼠标光标,(这里类型是手)
primaryStage.setScene(scene);
primaryStage.show();
}
打开网页
3.组件
1.Botton
public void start(Stage primaryStage) throws Exception {
Group group = new Group();
Scene scene = new Scene(group,720,480);
Button button = new Button("按钮");
button.setLayoutX(200);
button.setLayoutY(200);
button.setPrefHeight(200); //按钮大小
button.setPrefWidth(200);
button.setFont(Font.font("sans-serif",40)); //按钮中的字体类型,大小
//设置按钮格式
BackgroundFill bgf = new BackgroundFill(Paint.valueOf("#C1FFC1"), new CornerRadii(20),new Insets(10)); //按钮环境填充的颜色,圆角,内边距
Background bg = new Background(bgf);
button.setBackground(bg);
group.getChildren().add(button);
// scene.setCursor(Cursor.CLOSED_HAND); //设置鼠标光标
primaryStage.setScene(scene);
primaryStage.show();
效果:
上面再添加下面代码
//设置边界
BorderStroke bs = new BorderStroke(Paint.valueOf("#FFD700"),BorderStrokeStyle.SOLID,new CornerRadii(20),new BorderWidths(10));
Border border = new Border(bs);
button.setBorder(border);
效果图:
使用css样式
JavaFX CSS Reference Guide (oracle.com)
button.setStyle("-fx-background-color: #C1FFC1;" +
"-fx-text-fill:red;"+
"-fx-background-radius:20;"
);
如果写入这样的代码
效果图:
按钮设置监听事件
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Button b = (Button) event.getSource(); //监听事件可以获取这个按钮的信息
System.out.println("按钮中的文本是:" +b.getText());
}
});
鼠标监听,且是左键(可以通过点击事件,得到事件的信息)
button.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
// System.out.println(event.getButton().name());
if(event.getClickCount() == 2 && event.getButton().name().equals(MouseButton.PRIMARY.name())){
System.out.println("左键双击");
}
}
});
键盘监听
button.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
System.out.println(event.getCode().name());
}
});
//注意,这里如果是中文输入法会undefined
快捷键
(这里没进行深入了解,以后如果需要再来看)JavaFX视频教程第11课,设置快捷键_哔哩哔哩_bilibili
源代码:
@Override public void start(Stage primaryStage) throws Exception { Group group = new Group(); Scene scene = new Scene(group,720,480); Button button = new Button("按钮"); button.setLayoutX(200); button.setLayoutY(200); button.setPrefHeight(200); //按钮大小 button.setPrefWidth(200); button.setFont(Font.font("sans-serif",40)); //按钮中的字体类型,大小 //设置按钮格式 // BackgroundFill bgf = new BackgroundFill(Paint.valueOf("#C1FFC1"), new CornerRadii(20),new Insets(10)); //按钮环境填充的颜色,圆角,内边距 // Background bg = new Background(bgf); // button.setBackground(bg); // //设置边界 // BorderStroke bs = new BorderStroke(Paint.valueOf("#FFD700"),BorderStrokeStyle.SOLID,new CornerRadii(20),new BorderWidths(10)); //颜色,边界线的类型(虚线...),圆角,线的宽度。 // Border border = new Border(bs); // button.setBorder(border); button.setStyle("-fx-background-color: #C1FFC1;" + "-fx-text-fill:red;"+ "-fx-background-radius:20;" ); // button.setOnAction(new EventHandler<ActionEvent>() { // @Override // public void handle(ActionEvent event) { // Button b = (Button) event.getSource(); //监听事件可以获取这个按钮的信息 // System.out.println("按钮中的文本是:" +b.getText()); // } // }); button.setOnMouseClicked(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { // System.out.println(event.getButton().name()); if(event.getClickCount() == 2 && event.getButton().name().equals(MouseButton.PRIMARY.name())){ System.out.println("左键双击"); } } }); button.setOnKeyPressed(new EventHandler<KeyEvent>() { @Override public void handle(KeyEvent event) { System.out.println(event.getCode().name()); } }); group.getChildren().add(button); // scene.setCursor(Cursor.CLOSED_HAND); //设置鼠标光标 primaryStage.setScene(scene); primaryStage.show();
2.输入框,密码框,标签
1.TextField
文本框的提示,大小,字样(同控件button一样,可以使用css,或者直接进行编辑样式)
public void start(Stage primaryStage) throws Exception {
TextField textField = new TextField();
TextField textField2 = new TextField();
//提示
Tooltip tip = new Tooltip("提示");
tip.setStyle("-fx-font-size:15px;");
textField.setTooltip(tip);
textField.setLayoutX(200);
textField.setLayoutY(200);
textField2.setLayoutX(200);
textField2.setLayoutY(250);
textField.setPromptText("你好,世界"); //文本(并不是所有时候都显示,只能光标不在,文本框中内容为空时才展示
textField.setFocusTraversable(false); //起始时光标不会在文本框获得焦点
textField.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
//监听输入的长度
if(newValue.length() > 7){ //文本框中的字符不会大于7
textField.setText(oldValue);
}
}
});
Group gp = new Group();
gp.getChildren().add(textField);
gp.getChildren().add(textField2);
Scene scene = new Scene(gp,720,480);
primaryStage.setScene(scene);
primaryStage.show();
这里如果要限制文本框中的输入个数,可以使用一个Property监听器,进行判断。(比如后面使用邮箱时,长度就可以使用这个)。