我正在学习如何在javafx中创建对话框,我写了一段代码,这给了我一个问题。错误在createLoginDialog方法中。
错误为“无法访问TryDialogBox类型的封闭实例。必须用TryDialogBox类型的封闭实例限定分配(例如x.new A(),其中x是TryDialogBox的实例)。
public class TryDialogBox extends Application {
static Stage LOGIN_DIALOG;
static int dx = 1;
static int dy = 1;
private static Stage createLoginDialog(Stage parent, boolean modal) {
if (LOGIN_DIALOG != null) {
LOGIN_DIALOG.close();
}
return new MyDialog(parent, modal, "welcom");
}
public void start(final Stage stage) {
stage.setTitle("developing dialog");
Group root = new Group();
Scene scene = new Scene(root, 433, 312, Color.WHEAT);
MenuBar menuBar = new MenuBar();
menuBar.prefWidthProperty().bind(stage.widthProperty());
Menu menu = new Menu("home");
// add
MenuItem newItem = new MenuItem("change password", null);
newItem.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
if (LOGIN_DIALOG == null) {
LOGIN_DIALOG = createLoginDialog(stage, true);
}
LOGIN_DIALOG.sizeToScene();
LOGIN_DIALOG.show();
}
});
menu.getItems().add(newItem);
// add separator
menu.getItems().add(new SeparatorMenuItem());
// add non mdal menu item
ToggleGroup modalGroup = new ToggleGroup();
RadioMenuItem nonModalItem = RadioMenuItemBuilder.create()
.toggleGroup(modalGroup).text("non modal").selected(true)
.build();
nonModalItem.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
LOGIN_DIALOG = createLoginDialog(stage, false);
}
});
menu.getItems().add(nonModalItem);
// add modal
RadioMenuItem modalItem = RadioMenuItemBuilder.create()
.toggleGroup(modalGroup).text("modal").selected(true).build();
modalItem.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
LOGIN_DIALOG = createLoginDialog(stage, true);
}
});
menu.getItems().add(modalItem);
// add sep
menu.getItems().add(new SeparatorMenuItem());
// add exit
MenuItem exitItem = new MenuItem("Exit", null);
exitItem.setMnemonicParsing(true);
exitItem.setAccelerator(new KeyCodeCombination(KeyCode.X,
KeyCombination.CONTROL_DOWN));
exitItem.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
Platform.exit();
}
});
menu.getItems().add(exitItem);
// add menu
menuBar.getMenus().add(menu);
root.getChildren().add(menuBar);
stage.setScene(scene);
stage.show();
}
class MyDialog extends Stage {
public MyDialog(Stage owner, boolean modality, String title) {
super();
initOwner(owner);
Modality m = modality ? Modality.APPLICATION_MODAL : Modality.NONE;
initModality(m);
setOpacity(.90);
setTitle(title);
Group root = new Group();
Scene scene = new Scene(root, 250, 150, Color.WHITE);
setScene(scene);
GridPane gridpane = new GridPane();
gridpane.setPadding(new Insets(5));
gridpane.setHgap(5);
gridpane.setVgap(5);
Label mainLabel = new Label("enter username & password");
gridpane.add(mainLabel, 1, 0, 2, 1);
Label userNamelbl = new Label("username");
gridpane.add(userNamelbl, 0, 1);
Label passwordlbl = new Label("password");
gridpane.add(passwordlbl, 0, 2);
// username textfield
final TextField userNameFld = new TextField("Admin");
gridpane.add(userNameFld, 1, 1);
// password
final PasswordField passwordFld = new PasswordField();
passwordFld.setText("dwossap");
gridpane.add(passwordFld, 1, 2);
Button login = new Button("change");
login.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
close();
}
});
gridpane.add(login, 1, 3);
GridPane.setHalignment(login, HPos.RIGHT);
root.getChildren().add(gridpane);
}
}
public static void main(String[] args) {
launch(args);
}
}
三种可能的解决方案(选择一种):
>
从方法createLoginDialog
中删除“静态”
将“静态”添加到类MyDialog
将类MyDialog
移出类TryDialogBox
我尝试了很多我在网上看到的不同东西,但我什么都做不了。我只需要一个简单的对话框,当你点击菜单中的退出按钮并询问“您确定要退出吗?”并提供一个有效的“是的,我确定。”和“不,取消”按钮。
我正在编写一个javafx程序,我需要创建和使用我自己的Stage based (Javafx。Stage)对话框,用于显示消息和确认。到目前为止,我已经编写了所有必要的代码,但是我有一个问题: 对话框必须停止执行其余代码,直到给出类似“是”或“否”或“重试”之类的响应。当我使用我的对话框,如“DialogBox.ShowMessage”时,会出现一个带有消息和按钮的阶段。但是,正如您可能认为的那
我正在使用新的JavaFX Alert类(Java1.8_40),并尝试在exibition文本中使用HTML标记,但到目前为止还没有成功。下面是我正在尝试做的一个例子。 有没有人知道这是不是真的可能,给我举个例子? 提前道谢。
问题内容: 我需要在JavaFX中创建一个对话框。我知道我可以通过修改模式,所有者和可调整大小的属性来使舞台表现得像对话框。 但是,如何从舞台窗口中隐藏“最小化”和“最大化”按钮?典型的对话框只有“关闭”按钮。 问题答案: 在Windows 7下,在显示窗口之前初始化为StageStyle.UTILITY将创建一个仅具有关闭按钮而没有最小化或最大化按钮的窗口: 如果您需要一整套基本的JavaFX对
我需要用JavaFX创建一个对话框。我知道我可以通过修改modal、owner和resizable属性使Stage的行为像一个对话框。 但是我如何从舞台窗口隐藏“最小化”和“最大化”按钮呢?典型的对话框只有“关闭”按钮。
我正在寻找一种方法来设置默认JavaFX对话框(。 我尝试获取对话框窗格并添加样式表,但它只覆盖了对话框的一小部分。我更喜欢只使用外部css文件进行样式设计,而不在代码上添加样式类。这看起来很混乱(标题、内容、内容上的自有内容等等) 我已经在谷歌上搜索了很多,只找到了ControctionFX的例子,但是由于jdk8_40 JavaFX有自己的Dialogs,我现在使用它们。 有什么建议吗? 编辑