我试图找到一种使用StageStyle.DECORATED
创建舞台的方法,但是没有最小化或最大化按钮,并且没有关闭按钮的原始外观。我已经尝试过StageStyle.UTILITY
,但这看起来很奇怪。
我想要一些像这样的窗口: (这是intelliJ的窗口) IntelliJ Open URL Window
有人对此有想法吗? 谢谢!
答案 0 :(得分:3)
阶段或对话框的默认StageStyle为StageStyle.DECORATED
,阅读StageStyle Documentation可以看到:
因此,从上面的描述中,您看到阶段有所不同的原因是“最小平台装饰”,根据您或您的客户所使用的平台,它当然可能不会引起注意或不会引起注意。据我所知,没有任何访问或更改装饰的方法,因为操作系统负责显示标题栏和应用程序边框的显示方式。我知道可以实现的唯一方法是创建自己的自定义阶段并应用所需的任何CSS。为此,您必须设置StageStyle.UNDECORATED
并从头开始创建标题栏。
尽管在您的特定情况下,您不需要使用舞台。您可以使用不具有最小化和最大化按钮的自定义对话框来实现此目的(至少在Java 8上,但我认为最新版本也是如此),这是一个示例:
import java.util.Optional;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonBar.ButtonData;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class App extends Application {
@Override
public void start(Stage stage) throws Exception {
String input = showInputDialog();
System.out.println("User Input : " + input);
Platform.exit();
}
private String showInputDialog() {
// Create the custom dialog.
Dialog<String> dialog = new Dialog<String>();
dialog.setTitle("Open URL");
// Remove the header
dialog.setHeaderText(null);
// If you want to add an icon to the Dialog
// dialog.setGraphic(new
// ImageView(this.getClass().getResource("logo.png").toExternalForm()));
// Set the button types.
ButtonType okButtonType = new ButtonType("OK", ButtonData.OK_DONE);
dialog.getDialogPane().getButtonTypes().addAll(okButtonType, ButtonType.CANCEL);
// Create a VBox to store your controls
VBox mainPane = new VBox(5);
Label promptLabel = new Label("Specify URL :");
HBox urlPane = new HBox();
urlPane.setPadding(new Insets(5));
urlPane.setAlignment(Pos.CENTER);
TextField urlField = new TextField();
Button searchButton = new Button("Search");
searchButton.setOnAction(e->{
// open a FileChooser etc and do something
});
urlPane.getChildren().addAll(urlField, searchButton);
mainPane.getChildren().addAll(promptLabel, urlField);
HBox.setHgrow(urlField, Priority.ALWAYS);
// Enable/Disable OK button depending on whether a urlField was filled.
Node confirmationButton = dialog.getDialogPane().lookupButton(okButtonType);
confirmationButton.disableProperty().bind(urlField.textProperty().isEmpty());
// set the content of the Dialog
dialog.getDialogPane().setContent(mainPane);
// set dialog return value
dialog.setResultConverter(dialogButton -> {
if (dialogButton == okButtonType) {
return urlField.getText();
}
return null;
});
Optional<String> result = dialog.showAndWait();
if (result.isPresent()) {
return result.get();
} else {
return null;
}
}
public static void main(String[] args) {
launch(args);
}
}
结果: