[英]JAVAFX tablecolumn
我試圖讓我的javafx(使用場景生成器)讀取員工ID和姓名的列表。 大多數功能都可以,但是我希望單擊“顯示”按鈕時顯示已添加到列表中的名稱。 另外,我在場景生成器中創建了一個表格視圖,我希望當單擊“顯示”按鈕時彈出該窗口。 用observablelist做到這一點的唯一方法是嗎? 如何做到這一點。 到目前為止,我的代碼如下。 我沒有附加員工類或主要的fxml文件,但我可以,如果有幫助。
enter
package queue5230;
import java.io.IOException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Locale;
import java.util.Queue;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.stage.Modality;
import javafx.stage.Stage;
public class FXMLDocumentController {
Queue<Employee> empQu = new LinkedList<>();
String name;
String startTime;
String endTime;
int id;
@FXML
private TextField employeeId;
@FXML
private TextField employeeName;
@FXML
private Button insertButton;
@FXML
private Button removeButton;
@FXML
private Button showButton;
@FXML
private TableView<Employee> showTable;
@FXML
private TableColumn<Employee, String> idField;
@FXML
private TableColumn<Employee, String> nameField;
@FXML
private void handleButtonAction(ActionEvent event) {
}
@FXML
private void handleTextInsert(ActionEvent event) throws IOException{
if(insertButton == event.getSource())
{
//get values entered
id = Integer.parseInt(employeeId.getText());
name = employeeName.getText();
//get time entered
Date d = new Date();
//get the date format
startTime = new SimpleDateFormat("HH:mm:ss", Locale.ENGLISH).format(d);
//Create employee object
Employee emp = new Employee(id, name, startTime);
//ad object to queue
empQu.add(emp);
}else if(removeButton == event.getSource()){
Employee empr = empQu.remove();
Date end = new Date();
endTime = new SimpleDateFormat("HH:mm:ss", Locale.ENGLISH).format(end);
String elapse = getElapsedTime(empr.getTime(), endTime);
}else if(showButton == event.getSource()){
Stage stage;
Parent root;
String str = "ID NAME TIME START\n\n";
Iterator<Employee> it = empQu.iterator();
while(it.hasNext()){
//str += it.next() + "\n";
}
stage = new Stage();
root = FXMLLoader.load(getClass().getClassLoader().getResource("Show.fxml"));
stage.setScene(new Scene(root));
stage.initModality(Modality.APPLICATION_MODAL);
stage.showAndWait();
}
}
public String getElapsedTime(String starting, String ending)
{
String startToken[] = starting.split(":");
String endToken[] = ending.split(":");
int hours = Math.abs(Integer.parseInt(startToken[0])-Integer.parseInt(endToken[0]));
int minutes = Math.abs(Integer.parseInt(startToken[1])-Integer.parseInt(endToken[1]));
int seconds = Math.abs(Integer.parseInt(startToken[2])-Integer.parseInt(endToken[2]));
return hours + ":" + minutes + ":" + seconds;
}
public void initialize() {
}
}
這里的代碼
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="queue5230.FXMLDocumentController">
<children>
<Pane layoutX="31.0" layoutY="22.0" prefHeight="361.0" prefWidth="540.0">
<children>
<TableView fx:id="showTable" layoutX="101.0" layoutY="11.0" prefHeight="340.0" prefWidth="401.0">
<columns>
<TableColumn fx:id="idField" prefWidth="75.0" text="ID" />
<TableColumn fx:id="nameField" prefWidth="75.0" text="Name" />
</columns>
</TableView>
</children>
</Pane>
</children>
</AnchorPane>
在此頁面上很好https://docs.oracle.com/javafx/2/ui_controls/table-view.htm ,其中有示例如何在TableView中顯示對象的示例,但是您可以在fxml中進行定義:
<TableColumn fx:id="nameField" prefWidth="75.0" text="Name" >
<cellValueFactory>
<javafx.scene.control.cell.PropertyValueFactory property="the field name"/>
</cellValueFactory>
</TableColumn>
您的fxml代碼,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="queue5230.FXMLDocumentController">
<children>
<Pane layoutX="31.0" layoutY="22.0" prefHeight="361.0" prefWidth="540.0">
<children>
<TableView fx:id="showTable" layoutX="101.0" layoutY="11.0" prefHeight="340.0" prefWidth="401.0">
<columns>
<TableColumn fx:id="idField" prefWidth="75.0" text="ID" >
<cellValueFactory>
<javafx.scene.control.cell.PropertyValueFactory property="id"/>
</cellValueFactory>
</TableColumn>
<TableColumn fx:id="nameField" prefWidth="75.0" text="Name" >
<cellValueFactory>
<javafx.scene.control.cell.PropertyValueFactory property="name"/>
</cellValueFactory>
</TableColumn>
</columns>
</TableView>
</children>
</Pane>
</children>
</AnchorPane>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.