Button

这篇博客详细介绍了JavaFX中的Button控件,包括创建Button、添加到Scene Graph、文本设置、文本样式、大小调整、事件处理、默认和取消模式、图片显示、CSS样式应用以及不可用状态的设置。此外,还提到了在FXML文件中使用Button和Transformations的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

■ 关于Button

一个Button类(javafx.scene.control.Button)对象,代表了一个Button控件
当用户点击Button时,会执行相应的操作

■ 创建Button

Button button = new Button("My Button");

■ 追加Button到Scene Graph

想要Button可见, 必须将其加入到Scene,或将其加入到一个layout再将layout加入到Scene

Button button = new Button("My Button");
Scene scene = new Scene(button, 200, 100);
primaryStage.setScene(scene);
primaryStage.show();

注:
当Button被直接加入到Scene时,Button的大小会跟Scene一样,因此无法看到Button的边界
将Button加入到layout,再将layout加入到Scene,这样就会看到button的边界

■ 文本

有以下两种方式,可以改变按钮的文本:

  • 创建Button实例时,通过构造函数设置Button文本
  • 创建Button实例后,通过setText()方法设置Button的文本
Button button1 = new Button("My Button1");
Button button2 = new Button();
button2.setText("My Button2");

■ 文本大小

可以通过CSS设置Button的Text Size,比如-fx-text-size

■ 文本跨行

当Button的Text过长,可以让其跨行显示
通过 setWrapText() 方法设置按钮文本的跨行显示

button.setWrapText(true);  //当按钮文本过长,可跨行显示
button.setWrapText(false);  //当按钮文本过长,不可跨行显示,过长的部分显示为省略号

■ 文本字体样式

可以为按钮的文本设置字体样式
通过 setFont() 方法为按钮的文本设置字体样式

Button button = new Button("Click me!");
Font font = Font.font("Courier New", FontWeight.BOLD, 36);
button.setFont(font);

■ 默认模式

可以为按钮设置默认模式
默认模式,就是界面初始化时,光标默认落在了指定按钮上,这样用户就不必手动移动鼠标去点这个按钮,直接敲击回车即可
通过 setDefaultButton() 方法为按钮设置默认模式

button.setDefaultButton(true);

■ 取消模式

可以为按钮设置取消模式
当一个按钮处于取消模式时,点击Esc按钮后(同一scene内,Esc按钮没有被设置为其他按钮的快捷键),该按钮被激活
通过setCancelButton()方法为按钮设置取消模式

buttonDefault.setCancelButton(true);

■ 图片

按钮里既可以显示文本,又可以显示图片

primaryStage.setTitle("HBox Experiment 1");
FileInputStream input = new FileInputStream("resources/images/iconmonstr-home-6-48.png");
Image image = new Image(input);
ImageView imageView = new ImageView(image);
Button button = new Button("Home", imageView);
Scene scene = new Scene(button, 200, 100);
primaryStage.setScene(scene);
primaryStage.show();

■ 大小

可以为按钮设置大小
有以下方法:

  • setMinWidth() //最小宽度

  • setMaxWidth() //最大宽度

  • setPrefWidth() //期待宽度,如果有空余的空间,则按钮显示期待的宽度; 否则,会缩小直到最小宽度

  • setMinHeight() //最小高度

  • setMaxHeight() //最大高度

  • setPrefHeight() //期待宽度,如果有空余的空间,则按钮显示期待的高度; 否则,会缩小直到最小高度

  • setMinSize() //同时设定最小宽度,高度

  • setMaxSize() //同时设定最大宽度,高度

  • setPrefSize() //同时设定期待宽度,高度

button.setMaxSize(100, 200);
//相当于以下代码
button.setMaxWidth(100);
button.setMaxHeight(200);

■ 事件

可以为按钮添加事件
当按下按钮时,可以做相应的处理

button.setOnAction(new EventHandler() {
    @Override
    public void handle(ActionEvent actionEvent) {
        //... do something in here.
    }
});

lamada表达式

button.setOnAction(actionEvent ->  {
    //... do something in here.    
});
primaryStage.setTitle("HBox Experiment 1");

Label label = new Label("Not clicked");
Button button = new Button("Click");

button.setOnAction(value ->  {
   label.setText("Clicked!");
});

HBox hbox = new HBox(button, label);
Scene scene = new Scene(hbox, 200, 100);
primaryStage.setScene(scene);
primaryStage.show();

■ 助记符

可以为一个按钮设置助记符
一个助记符就是一个按键,当按下alt + 按键,会触发某一个指定的按钮,简单讲就是为一个按钮设置快捷键
助记符是大小写敏感的

button.setMnemonicParsing(true);
button.setText("_Click");  //表示button的助记符是C,同时按下alt + C, 就会触发该按钮

button.setMnemonicParsing(false);
button.setText("_Click"); //如果设定为false,则下划线_会被当作普通字符

■ CSS样式

可以为按钮设置CSS样式
按钮控件支持以下CSS样式:

  • -fx-border-width
  • -fx-border-color
  • -fx-background-color
  • -fx-font-size
  • -fx-text-fill
Button button = new Button("My Button");
button.setStyle("-fx-background-color: #ff0000; ");  //既可以通过setStyle()方法设置CSS样式,也可以通过CSS文件设置
button1.setStyle("-fx-border-color: #ff0000; -fx-border-width: 5px;");
button2.setStyle("-fx-background-color: #00ff00");
button3.setStyle("-fx-font-size: 2em; ");
button4.setStyle("-fx-text-fill: #0000ff");

■ 不可用

通过 setDisable() 方法为按钮设置不可用状态

button.setDisable(true);  //按钮设置为可用
button.setDisable(false);  //按钮设置为不可用

■ FXML

可以通过FXML文件对Button进行修饰
button-example.fxml

<?xml version="1.0" encoding="UTF-8"?>
    <?import javafx.scene.layout.VBox?>
    <?import javafx.scene.control.Button?>
    <VBox xmlns:fx="http://javafx.com/fxml" spacing="20">
    <children>
        <Button fx:id="button1" text="Click me!" onAction="#buttonClicked"/>
    </children>
</VBox>

Controller.java

import javafx.event.Event;
import javafx.fxml.FXML;
import javafx.scene.control.Button;

public class ButtonFXMLController {

    public Button button1 = null;
    private int   button1ClickCount = 0;

    @FXML
    public void buttonClicked(Event e){
        this.button1ClickCount++;
        String text = "Button1 clicked " + this.button1ClickCount + " times";
        System.out.println(text);
        button1.setText(text);
    }
}

Main.java

FXMLLoader loader = new FXMLLoader();

ButtonFXMLController controller = new ButtonFXMLController();
loader.setController(controller);

File fxmlFile = new File("assets/fxml/button-example.fxml");
URL fxmlUrl = fxmlFile.toURI().toURL();
loader.setLocation(fxmlUrl);
VBox vbox = loader.<VBox>load();
Scene scene = new Scene(vbox);
primaryStage.setScene(scene);
primaryStage.setTitle("Button FXML Example");
primaryStage.setWidth(300);
primaryStage.setHeight(300);
primaryStage.show();

■ Transformations

可以为Button追加一些处理,比如缩放,旋转,翻译等

Scale scaleTransformation = new Scale();
scaleTransformation.setX(3.0);
scaleTransformation.setY(2.0);
scaleTransformation.setPivotX(0);
scaleTransformation.setPivotY(0);

Button button = new Button();
button.setText("Click me!");
button.setOnAction((event) -> {
	System.out.println("Button clicked!");
});

button.getTransforms().add(scaleTransformation);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值