我正在使用以下ControlFX项目。因此,在我的程序包中创建了一个Dialogs.java类,并从那里粘贴了代码。

由于我不在包org.controlsfx.dialog中,因此必须执行以下操作:

导入org.controlsfx.dialog.LightweightDialog;

而且我得到以下错误,如下图所示:

当我进入包org.controlsfx.dialog并打开LightweightDialog.class时,

我无法将课程公开。

我应该如何克服这种情况?请指教。

最佳答案

如果该类不是公共的,则它不是公共API的一部分,因此您不打算(或实际上不可能)使用它。

要在ControlsFX中使用轻量级对话框,可以使用Dialogs类API并在创建对话框的过程中调用lightweight()方法,也可以调用Dialog构造函数之一,该构造函数为lightweight属性。

这是使用Dialogs fluent API的完整示例:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

import org.controlsfx.dialog.Dialogs;


public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            BorderPane root = new BorderPane();
            Scene scene = new Scene(root,600,400);

            TabPane tabPane = new TabPane();
            Tab tab1 = new Tab("Tab 1");
            BorderPane tab1Root = new BorderPane();
            Button showDialogButton = new Button("Enter message...");
            VBox messages = new VBox(3);
            HBox buttons = new HBox(5);
            buttons.setAlignment(Pos.CENTER);
            buttons.setPadding(new Insets(5));
            buttons.getChildren().add(showDialogButton);
            tab1Root.setBottom(buttons);

            ScrollPane messageScroller = new ScrollPane();
            messageScroller.setContent(messages);
            tab1Root.setCenter(messageScroller);

            tab1.setContent(tab1Root);

            Tab tab2 = new Tab("Tab 2");
            tab2.setContent(new TextField("This is tab 2"));

            tabPane.getTabs().addAll(tab1, tab2);

            showDialogButton.setOnAction(event -> {
                String response = Dialogs.create()
                        .lightweight()
                        .owner(tab1)
                        .masthead("Enter a new message")
                        .message("Enter your new message:")
                        .showTextInput();
                if (response != null) {
                    messages.getChildren().add(new Label(response));
                }
            });

            root.setCenter(tabPane);

            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}


使用Dialog构造函数,您会做类似的事情,尽管要做的工作还很多:

// params are owner, title, lightweight:
Dialog dialog = new Dialog(someNode, "Dialog", true);
// lots of code here to configure dialog...
Action response = dialog.show();


ControlsFX的真正美在于非常全面的文档。只需检查Javadocs for DialogsDialog

10-08 13:39