JavaFXTableColumn

JavaFXTableColumn,javafx,Javafx,我试图让我的javafx(使用场景生成器)读入员工id和姓名列表。大多数都可以,但我希望在单击“显示”按钮时显示已添加到列表中的名称。另外,我在scene builder中创建了一个tableview,我希望在单击“显示”按钮时该窗口会弹出。使用obeservablelist是否是唯一的方法?如何才能做到这一点。我的代码如下。我没有附加employee类或主fxml文件,但如果有帮助,我可以附加 enter package queue5230; import java.io.IOExcepti

我试图让我的javafx(使用场景生成器)读入员工id和姓名列表。大多数都可以,但我希望在单击“显示”按钮时显示已添加到列表中的名称。另外,我在scene builder中创建了一个tableview,我希望在单击“显示”按钮时该窗口会弹出。使用obeservablelist是否是唯一的方法?如何才能做到这一点。我的代码如下。我没有附加employee类或主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() {



    }    

}
enter
包队列5230;
导入java.io.IOException;
导入java.net.URL;
导入java.text.simpleDataFormat;
导入java.util.Date;
导入java.util.Iterator;
导入java.util.LinkedList;
导入java.util.Locale;
导入java.util.Queue;
导入java.util.ResourceBundle;
导入javafx.event.ActionEvent;
导入javafx.fxml.fxml;
导入javafx.fxml.fxmloader;
导入javafx.fxml.Initializable;
导入javafx.scene.Parent;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.Label;
导入javafx.scene.control.ListView;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.scene.control.TextField;
导入javafx.stage.model;
导入javafx.stage.stage;
公共类FXMLDocumentController{
Queue empQu=new LinkedList();
字符串名;
字符串起始时间;
字符串结束时间;
int-id;
@FXML
私人TextField employeeId;
@FXML
私有TextField employeeName;
@FXML
私人按钮插入按钮;
@FXML
私人按钮移除按钮;
@FXML
私人按钮显示按钮;
@FXML
私人桌面视图展示台;
@FXML
私有表字段;
@FXML
私有表列名称字段;
@FXML
私有无效把手按钮操作(ActionEvent事件){
}
@FXML
私有void handleTextInsert(ActionEvent事件)引发IOException{
if(insertButton==event.getSource())
{
//获取输入的值
id=Integer.parseInt(employeeId.getText());
name=employeeName.getText();
//输入时间
日期d=新日期();
//获取日期格式
startTime=newsimpledateformat(“HH:mm:ss”,Locale.ENGLISH)。格式(d);
//创建员工对象
员工emp=新员工(id、姓名、开始时间);
//要排队的ad对象
empQu.add(emp);
}else if(removeButton==event.getSource()){
Employee empr=empQu.remove();
日期结束=新日期();
endTime=newsimpledateformat(“HH:mm:ss”,Locale.ENGLISH)。格式(end);
字符串elapse=getElapsedTime(empr.getTime(),endTime);
}else if(showButton==event.getSource()){
阶段性;
亲本根;
String str=“ID NAME TIME START\n\n”;
迭代器it=empQu.Iterator();
while(it.hasNext()){
//str+=it.next()+“\n”;
}
阶段=新阶段();
root=FXMLLoader.load(getClass().getClassLoader().getResource(“Show.fxml”));
舞台场景(新场景(根));
阶段.初始模态(模态.应用\模态);
stage.show和wait();
}
}
公共字符串getElapsedTime(字符串开始、字符串结束)
{
字符串startToken[]=starting.split(“:”);
字符串endToken[]=end.split(“:”);
inthours=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]);
返回时数+“:”+分钟+“:”+秒;
}
公共无效初始化(){
}    
}
代码在这里

<?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>

好的,在本页中,有一些如何在TableView中显示对象的示例,但您可以在fxml中定义:


您的fxml代码将如下所示:



我被你的代码弄糊涂了。您有两个FXML文件,对吗?您正在显示哪个控制器,是主文件的控制器还是用“显示”按钮加载的控制器?是的,我有两个FXML文件,两个FXML文件使用同一个控制器。我发布的FXML文件是在单击主FXML上的“显示”按钮后弹出的文件。不要对两个控制器使用同一个类-这会让人非常困惑,因为您无法跟踪哪个实例初始化了哪些字段。为每个FXML文件使用不同的控制器类。