我正在使用以下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 Dialogs和Dialog。