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>() {@Overridepublic 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();}@Overridepublic 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>() {@Overridepublic 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>() {@Overridepublic void handle(ActionEvent event) {Button b = (Button) event.getSource(); //监听事件可以获取这个按钮的信息System.out.println("按钮中的文本是:" +b.getText()); }});
鼠标监听,且是左键(可以通过点击事件,得到事件的信息)
button.setOnMouseClicked(new EventHandler<MouseEvent>() {@Overridepublic 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>() {@Overridepublic void handle(KeyEvent event) {System.out.println(event.getCode().name());}});//注意,这里如果是中文输入法会undefined
快捷键
(这里没进行深入了解,以后如果需要再来看)JavaFX视频教程第11课,设置快捷键_哔哩哔哩_bilibili
源代码:
@Overridepublic 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>() {@Overridepublic 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>() {@Overridepublic 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>() {@Overridepublic void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {//监听输入的长度if(newValue.length() > 7){ //文本框中的字符不会大于7textField.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监听器,进行判断。(比如后面使用邮箱时,长度就可以使用这个)。