@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Welcome to the Log Book Generator");
/*Defining Options on Home screen*/
Button btnR = new Button("Repair");
Button btnM = new Button("Maintenance");
Button btnW = new Button("Weather");
Button btnO = new Button ("Other");
Button btnU = new Button ("Filter Pickup");
Button btnVC = new Button ("Verification/Calibration");
Button btnE = new Button ("Exit");
/*Actions upon button selection*/
btnR.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Repair");
}
});
btnM.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Maintenance");
}
});
btnW.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Weather");
}
});
btnO.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Other");
}
});
btnU.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Filter Pickup");
}
});
btnVC.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Verification/Calibration");
}
});
btnE.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.exit(0);
}
});
Pane root = new Pane();
/*StackPane root = new StackPane();
/* Setting Button Layout*/
btnM.setLayoutX(150);btnM.setLayoutY(150);
btnR.setLayoutX(150);btnR.setLayoutY(250);
btnW.setLayoutX(150);btnW.setLayoutY(350);
btnO.setLayoutX(150);btnO.setLayoutY(150);
btnU.setLayoutX(150);btnU.setLayoutY(450);
btnVC.setLayoutX(150);btnVC.setLayoutY(550);
btnE.setLayoutX(350);btnE.setLayoutY(650);
/*Ask user for Selection*/
Label label;
label = new Label("Please select a task.");
label.setFont(Font.font("Arial", 32));
root.getChildren().add(label);
root.getChildren().add(btnE);
root.getChildren().add(btnVC);
root.getChildren().add(btnU);
root.getChildren().add(btnO);
root.getChildren().add(btnW);
root.getChildren().add(btnM);
root.getChildren().add(btnR);
primaryStage.setScene(new Scene(root, 500, 750));
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}`我正在计划在同一舞台上使不同的部分成为自己的场景。如果有任何帮助,我将不胜感激。我正在使用NetBeans8.2。
您不需要尝试更改scene
,而是希望更新屏幕的部分内容。
下面是使用BorderPane
作为根布局的简单示例,然后在单击按钮时更改Center
窗格的内容。
下面的示例只是将内容切换到不同的标签,但您也可以轻松地使用root.setcenter()
传递整个VBox
或HBox
或任何其他填充容器。
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.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
private BorderPane root;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setWidth(500);
// Simple interface. The buttons will be on the left and the contents of the center section will change
// when buttons are clicked.
root = new BorderPane();
root.setPadding(new Insets(10));
// Create the left pane, containing buttons to switch the CENTER content
VBox paneButtonBox = new VBox(5);
paneButtonBox.setAlignment(Pos.TOP_CENTER);
paneButtonBox.setPadding(new Insets(10));
// Create 3 buttons to change the contents of the CENTER
Button btnView1 = new Button("View 1");
btnView1.setOnAction(e -> switchContent(1));
Button btnView2 = new Button("View 2");
btnView2.setOnAction(e -> switchContent(2));
Button btnView3 = new Button("View 3");
btnView3.setOnAction(e -> switchContent(3));
// Add the Buttons to the button box
paneButtonBox.getChildren().addAll(btnView1, btnView2, btnView3);
// Add the button box to the LEFT of root pane
root.setLeft(paneButtonBox);
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
/**
* @param view is the # of the content we want to display. For this sample, just to demonstrate.
*/
private void switchContent(int view) {
// Change the content of the CENTER node based on button clicked
switch (view) {
case 1:
root.setCenter(new Label("THIS IS VIEW 1"));
break;
case 2:
root.setCenter(new Label("THIS IS VIEW 2"));
break;
case 3:
root.setCenter(new Label("THIS IS VIEW 3"));
break;
}
}
}
上面的代码产生以下布局:
单击每个按钮时,右侧的标签
会发生变化。希望这有助于引导你走向正确的方向。
基本概念是创建布局的一部分,您可以更改其内容。BorderPane
为您提供了这些部分,但您也可以自己创建一个单独的VBox
,并在需要更改内容时调用VBox.getChildrens().AddAll()
并传入所需的任何Node
对象。
@Override
public void start(Stage primaryStage) {
primaryStage.setHeight(300);
primaryStage.setWidth(500);
TabPane root = new TabPane();
// Create Separate Tabs
Tab tab1 = new Tab("Section 1");
tab1.setContent(new Label("This is Section 1!"));
Tab tab2 = new Tab("Section 2");
tab2.setContent(new Label("This is Section 2!"));
Tab tab3 = new Tab("Section 3");
tab3.setContent(new Label("This is Section 3!"));
root.getTabs().addAll(tab1, tab2, tab3);
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
所以基本上我想做的是改变我的场景的一部分。我想保持一个静态菜单栏在顶部,只改变底部的部分根据哪个菜单按钮正在被点击。这意味着每个“页面”都需要不同的FXML文件和控制器类。 看看可用的JavaFX特性,我认为SubScene可以完成这项工作。但经过进一步的调查,似乎子场景是为3D东西制作的?所以我真的不知道我该做什么。 任何帮助都将不胜感激!
我是JavaFX的新手。我有我的主要场景和次要场景;当我从第一个场景切换到第二个场景时,窗口的条形图变得可见。我该怎么解决呢?
我对JavaFX有问题。我创建了两个场景和开关按钮。当我点击那个按钮时,我正在改变场景。但之前我将fullscreen设置为true,按下按钮后,windows任务栏会显示片刻。有没有什么方法可以改变场景而不让这个任务栏可见呢?下面是代码: -----main class---- ----DesktopApplication类---- ----MyLayout类----
我在第一个场景上有一个简单的按钮,应该会导致第二个场景。当我点击按钮时,它改变场景,但只显示一个空白屏幕。如果我关闭原始舞台,然后显示一个包含新场景的新舞台,它会正常工作,但我不想打开一个新窗口。 这是我的控制器类: 主类:
我是这里的Java和JavaFx新手,我想问一个问题。简单地说,我有一个阶段,有一个按钮和一个特定大小的场景,我用这样的编码声明了场景的大小: 基本上,我试图通过点击一个按钮来增加当前舞台/场景的大小,但不知怎么的,出现了一些错误,我得到了运行时错误,它说“java.lang.IllegalArgumentException:Grid hgap=0.0,vgap=10.0,alignment=CE
对我如何做到这一点有什么建议吗? 这是我到目前为止编写的代码,但它似乎忽略了Thread.Sleep并且只使第三个代码变为蓝色。