私はJavaFXの新機能を使用しています。今週は小さなチュートリアルや構文を学ぶサンプルプロジェクトから知識を得て始めました。私は、情報を追加したり削除したり、このプログラムへのログインウィンドウを実装したりするための簡単な在庫情報テーブルを作成しました。私はログインウィンドウを作成しましたが、私の主な機能に適切に実装する方法は不明です。JavaFX - メインウィンドウにログインウィンドウを挿入する
Main.java
これには、在庫アプリケーション用のコードが含まれています。
package sample;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Insets;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
Stage window;
TableView<Stock> table;
TextField symbolInput, nameInput, openingPriceInput, closingPriceInput, changeInPriceInput;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
window = primaryStage;
window.setTitle("Stock Application");
//Symbol column
TableColumn<Stock, String> symbolColumn = new TableColumn<>("Symbol");
symbolColumn.setMinWidth(100);
symbolColumn.setCellValueFactory(new PropertyValueFactory<>("symbol"));
//Name column
TableColumn<Stock, String> nameColumn = new TableColumn<>("Name");
nameColumn.setMinWidth(100);
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
//Opening Price column
TableColumn<Stock, Double> openingPriceColumn = new TableColumn<>("Opening Price");
openingPriceColumn.setMinWidth(100);
openingPriceColumn.setCellValueFactory(new PropertyValueFactory<>("openingPrice"));
//Closing Price column
TableColumn<Stock, Double> closingPriceColumn = new TableColumn<>("Closing Price");
closingPriceColumn.setMinWidth(100);
closingPriceColumn.setCellValueFactory(new PropertyValueFactory<>("closingPrice"));
//Change in Price column
TableColumn<Stock, Double> changeInPriceColumn = new TableColumn<>("Change in Price");
changeInPriceColumn.setMinWidth(100);
changeInPriceColumn.setCellValueFactory(new PropertyValueFactory<>("changeInPrice"));
//Symbol input
symbolInput = new TextField();
symbolInput.setPromptText("Symbol");
symbolInput.setMinWidth(100);
//Name input
nameInput = new TextField();
nameInput.setPromptText("Name");
//Opening Price input
openingPriceInput = new TextField();
openingPriceInput.setPromptText("Opening Price");
//Closing Price input
closingPriceInput = new TextField();
closingPriceInput.setPromptText("Closing Price");
//Change in Price Input
changeInPriceInput = new TextField();
closingPriceInput.setPromptText("Change in Price");
//Button
Button addButton = new Button("Add");
addButton.setOnAction(e -> addButtonClicked());
Button deleteButton = new Button("Delete");
deleteButton.setOnAction(e -> deleteButtonClicked());
HBox hBox = new HBox();
hBox.setPadding(new Insets(10,10,10,10));
hBox.setSpacing(10);
hBox.getChildren().addAll(symbolInput, nameInput, openingPriceInput, closingPriceInput, changeInPriceInput, addButton, deleteButton);
table = new TableView<>();
table.setItems(getStock());
table.getColumns().addAll(symbolColumn, nameColumn, openingPriceColumn, closingPriceColumn, changeInPriceColumn);
VBox vBox = new VBox();
vBox.getChildren().addAll(table, hBox);
Scene scene = new Scene(vBox);
window.setScene(scene);
window.show();
}
//Add button clicked
public void addButtonClicked(){
Stock Stock = new Stock();
Stock.setSymbol(symbolInput.getText());
Stock.setName(nameInput.getText());
Stock.setOpeningPrice(Double.parseDouble(openingPriceInput.getText()));
Stock.setClosingPrice(Double.parseDouble(closingPriceInput.getText()));
Stock.setChangeInPrice(Double.parseDouble(changeInPriceInput.getText()));
table.getItems().add(Stock);
symbolInput.clear();
nameInput.clear();
openingPriceInput.clear();
closingPriceInput.clear();
changeInPriceInput.clear();
}
//Delete button clicked
public void deleteButtonClicked(){
ObservableList<Stock> StockSelected, allStocks;
allStocks = table.getItems();
StockSelected = table.getSelectionModel().getSelectedItems();
StockSelected.forEach(allStocks::remove);
}
//Get all of the Stocks
public ObservableList<Stock> getStock(){
ObservableList<Stock> stocks = FXCollections.observableArrayList();
stocks.add(new Stock("AMZN", "Amazon", 571, 576.4583, 5.4583));
stocks.add(new Stock("EBAY", "eBay", 24.10, 23.7318 , -0.3682));
stocks.add(new Stock("AAPL", "Apple Inc.", 103.91, 104.516, 0.606));
stocks.add(new Stock("SNEJF", "Sony Corp", 24.375, 24.375, 0.00));
stocks.add(new Stock("SBUX", "Starbucks", 58.32, 58.86, 0.54));
return stocks;
}
}
Controller.java
これは私のログインウィンドウのためのコードが含まれています。
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
public class Controller {
@FXML
private Label labelStatus;
@FXML
private TextField textUsername;
@FXML
private TextField textPassword;
public void Login(ActionEvent event) throws Exception {
if (textUsername.getText().equals("CS1113") && textPassword.getText().equals("Section011")) {
labelStatus.setText("Login is Successful");
Stage primaryStage = new Stage();
Parent root = FXMLLoader.load(getClass().getResource("/sample/Main.fxml"));
Scene scene = new Scene(root,400,400);
primaryStage.setScene(scene);
primaryStage.show();
} else {
labelStatus.setText("Login failed!!");
}
}
}
添付のFXMLファイル。
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.text.*?>
<AnchorPane prefHeight="300.0" prefWidth="300.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="sample.Controller">
<children>
<Button fx:id="buttonLogin" layoutX="113.0" layoutY="224.0" mnemonicParsing="false" text="Login">
<font>
<Font size="18.0" fx:id="x1" />
</font>
</Button>
<TextField fx:id="textUsername" layoutX="50.0" layoutY="68.0" prefWidth="200.0" promptText="username" />
<PasswordField id="txtPassword" fx:id="textPassword" layoutX="50.0" layoutY="150.0" prefWidth="200.0" promptText="password" />
<Label fx:id="labelStatus" font="$x1" layoutX="14.0" layoutY="14.0" prefWidth="272.0" text="Status" textAlignment="LEFT" textFill="#cc0000" />
</children>
</AnchorPane>
大量のコードを実装したり、作成したメソッドや関数を実装するための簡単な方法があることは確かです。
ご協力いただきまして誠にありがとうございます。
アプリケーションクラスは、コントローラではなくエントリポイントです。ログインウィンドウを最初に表示するには、最初に 'start'メソッドでログインを表示し、ログインが成功するまでメインウィンドウを表示しないようにしなければなりません。 – fabian