如何在Javafx中在窗格中央显示ProgressIndicator
我有一个带有一些控件和按钮的窗格。当我点击按钮时,我希望在不移除任何控件的情况下在窗格中央显示ProgressIndicator 当我在按钮的如何在Javafx中在窗格中央显示ProgressIndicator,javafx,javafx-8,Javafx,Javafx 8,我有一个带有一些控件和按钮的窗格。当我点击按钮时,我希望在不移除任何控件的情况下在窗格中央显示ProgressIndicator 当我在按钮的操作期间向窗格添加ProgressIndicator时,它会将其添加到按钮下方。我希望它覆盖在窗格上 下面的图片解释了我想要什么 代码 package fx; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.Event
操作期间向窗格添加ProgressIndicator时,它会将其添加到按钮下方。我希望它覆盖在窗格上
下面的图片解释了我想要什么
代码
package fx;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage arg0) throws Exception {
final VBox bx = new VBox();
bx.setAlignment(Pos.CENTER);
TextField userName = new TextField("User Name");
userName.setMaxWidth(200);
TextField email = new TextField("Email");
email.setMaxWidth(200);
Button submit = new Button("Submit");
submit.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
ProgressIndicator pi = new ProgressIndicator();
//adding here but it is adding at below of button
//how to do here
bx.getChildren().add(pi);
//Further process
}
});
bx.getChildren().addAll(userName, email, submit);
Scene c = new Scene(bx);
arg0.setScene(c);
arg0.setMinWidth(500);
arg0.setMinHeight(500);
arg0.show();
}
public static void main(String[] args) {
Main h = new Main();
h.launch(args);
}
}
package-fx;
导入javafx.application.application;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.geometry.Pos;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.ProgressIndicator;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
公共类主扩展应用程序{
@凌驾
public void start(阶段arg0)引发异常{
最终VBox bx=新的VBox();
bx.设置校准(位置中心);
TextField userName=新的TextField(“用户名”);
userName.setMaxWidth(200);
TextField email=新的TextField(“email”);
email.setMaxWidth(200);
按钮提交=新按钮(“提交”);
submit.setOnAction(新的EventHandler(){
公共无效句柄(ActionEvent事件){
ProgressIndicator pi=新的ProgressIndicator();
//在此处添加,但在按钮下方添加
//这里怎么办
bx.getChildren().add(pi);
//进一步处理
}
});
bx.getChildren().addAll(用户名、电子邮件、提交);
场景c=新场景(bx);
arg0.1(c);
arg0.设置最小宽度(500);
arg0.设置最小高度(500);
arg0.show();
}
公共静态void main(字符串[]args){
Main h=新的Main();
h、 发射(args);
}
}
您需要使用根布局而不是VBox。StackPane允许您将节点堆叠在彼此的顶部(z顺序)
在按钮的操作中,您可以创建一个新的ProgressIndicator并将其添加到StackPane中。我引入了另一个VBox作为指示器的父级,因为我不希望指示器捕获所有可用空间。您可以禁用
已存在的VBox,以获得按钮动作的灰显
效果。完成此过程后,您可以再次启用VBox
导入javafx.application.application;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.geometry.Pos;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.ProgressIndicator;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.StackPane;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
公共类主扩展应用程序{
@凌驾
public void start(阶段arg0)引发异常{
StackPane root=新的StackPane();
VBox bx=新的VBox();
bx.设置校准(位置中心);
TextField userName=新的TextField(“用户名”);
userName.setMaxWidth(200);
TextField email=新的TextField(“email”);
email.setMaxWidth(200);
按钮提交=新按钮(“提交”);
submit.setOnAction(新的EventHandler(){
公共无效句柄(ActionEvent事件){
ProgressIndicator pi=新的ProgressIndicator();
VBox框=新的VBox(pi);
框。设置对齐(位置中心);
//灰色背景
bx.setDisable(真);
root.getChildren().add(框);
}
});
bx.getChildren().addAll(用户名、电子邮件、提交);
root.getChildren().add(bx);
场景c=新场景(根);
arg0.1(c);
arg0.设置最小宽度(500);
arg0.设置最小高度(500);
arg0.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}
这很好,但是为了显示灰色,我不得不在布局中添加vbox,因为bx.setDisable(true)的一个;将不足以显示灰色,而且我添加了加载文本使用文本标签=新文本(“加载…请等待”);label.setBoundsType(textbundstype.VISUAL);标签:setFill(颜色:黑色);当您需要对按钮单击执行其他操作时,此操作将不起作用。例如,ProcessIndicator
应在登录按钮上显示,并在用户验证后单击和隐藏。因为它只有在当前线程完成后才会打开。
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage arg0) throws Exception {
StackPane root = new StackPane();
VBox bx = new VBox();
bx.setAlignment(Pos.CENTER);
TextField userName = new TextField("User Name");
userName.setMaxWidth(200);
TextField email = new TextField("Email");
email.setMaxWidth(200);
Button submit = new Button("Submit");
submit.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
ProgressIndicator pi = new ProgressIndicator();
VBox box = new VBox(pi);
box.setAlignment(Pos.CENTER);
// Grey Background
bx.setDisable(true);
root.getChildren().add(box);
}
});
bx.getChildren().addAll(userName, email, submit);
root.getChildren().add(bx);
Scene c = new Scene(root);
arg0.setScene(c);
arg0.setMinWidth(500);
arg0.setMinHeight(500);
arg0.show();
}
public static void main(String[] args) {
launch(args);
}
}