Java 当试图通过应用filterlist和sortedlist来筛选可观察列表时,表列中的值会被交换

Java 当试图通过应用filterlist和sortedlist来筛选可观察列表时,表列中的值会被交换,java,sql,javafx,Java,Sql,Javafx,我正在创建一个gatepass软件,它使用tableview直接向MYSQL数据库添加数据,我添加了一个search textField来从中搜索条目 每当我使用这个文本字段搜索时,一切都正常,但在后台,这些错误就会出现 "C:\Program Files\Java\jdk1.8.0_102\bin\java" -Didea.launcher.port=7537 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ

我正在创建一个gatepass软件,它使用tableview直接向MYSQL数据库添加数据,我添加了一个search textField来从中搜索条目

每当我使用这个文本字段搜索时,一切都正常,但在后台,这些错误就会出现

"C:\Program Files\Java\jdk1.8.0_102\bin\java" -Didea.launcher.port=7537 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.3.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_102\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\rt.jar;C:\Program Files (x86)\MySQL\Connector.J 5.1\mysql-connector-java-5.1.40-bin.jar;C:\Users\Suraj\IdeaProjects\DemoFinal\out\production\DemoFinal;C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.3.4\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain sample.Main
Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: argument type mismatch
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:246)
    at com.sun.glass.ui.View.handleKeyEvent(View.java:546)
    at com.sun.glass.ui.View.notifyKey(View.java:966)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
    at java.lang.Thread.run(Thread.java:745)
每当我按下一个键进行搜索时,每件事都很好,但每次按下一个键后,就会产生这些错误

而且在搜索之后,我的列值被交换,就像我有两列一样,一列是地址,另一列是电子邮件,搜索之后,它们开始互相显示其中的数据,它们的数据被交换

package sample;

import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
import javafx.collections.transformation.SortedList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;

import java.net.URL;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Objects;
import java.util.ResourceBundle;
import java.util.function.Predicate;

public class DataController implements Initializable {

    Config config = new Config();
    Connection connection = DatabaseConnection.getConnection();


    int ids;

    @FXML
    private TextArea Address;
    @FXML
    private Label LabelFilter;

    @FXML
    private TextField TextFiledFilter;

    @FXML
    private TextField Lname;

    @FXML
    private TextField PhoneNo;

    @FXML
    private Button btnAdd;
    @FXML
    private TableColumn<EntryData, String> firstname;

    @FXML
    private TableColumn<EntryData, String> address;
    @FXML
    private TableColumn<?, ?> Timee;

    @FXML
    private TableColumn<EntryData, String> emailid;

    @FXML
    private TableColumn<EntryData, Double> phoneno;

    @FXML
    private TableColumn<EntryData, String> lastname;
    @FXML
    private TableColumn<EntryData, Integer> id;

    @FXML
    private TableColumn<?, ?> Datee;

    @FXML
    private TextField mailId;
    @FXML
    private Menu menuFile;
    @FXML
    private MenuBar MenuBar;
    @FXML
    private MenuItem MenuItemFilter;

    @FXML
    private TextField Fname;
    @FXML
    private TableView TableID;
    ObservableList<EntryData> list = FXCollections.observableArrayList();
    ObservableList<EntryData> FilterData = FXCollections.observableArrayList();

    @FXML
    void addBtnAction(ActionEvent event) throws SQLException {

        String query = "INSERT INTO DemoFinal(id,name,lastname,phone_no,email_id,Address) Values(?,?,?,?,?,?)";
        PreparedStatement statement = connection.prepareStatement(query);
        statement.setInt(1, ++ids);
        statement.setString(2, Fname.getText());
        statement.setString(3, Lname.getText());
        statement.setDouble(4, Double.parseDouble(PhoneNo.getText()));
        statement.setString(5, mailId.getText());
        statement.setString(6, Address.getText());
        statement.execute();



        Fname.clear();
        Lname.clear();
        mailId.clear();
        Address.clear();
        PhoneNo.clear();
        TableID.getItems().addAll(list);


        statement.close();


    }






    public DataController() throws Exception {
    }

    public void factorySettings() {

        id.setCellValueFactory(new PropertyValueFactory<EntryData, Integer>("id"));
        firstname.setCellValueFactory(new PropertyValueFactory<EntryData, String>("name"));
        lastname.setCellValueFactory(new PropertyValueFactory<EntryData, String>("lastname"));
        phoneno.setCellValueFactory(new PropertyValueFactory<EntryData, Double>("phone_no"));
        emailid.setCellValueFactory(new PropertyValueFactory<EntryData, String>("email"));
        address.setCellValueFactory(new PropertyValueFactory<EntryData, String>("address"));


    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        if (connection != null) {
            try {
                DatabaseConnection.getConnection();
                update();

            } catch (Exception e) {

                e.printStackTrace();

            }


        } else {
            config.alert(Alert.AlertType.ERROR, "Database Server May be Down Check Logs");

        }








        FilteredList <EntryData> filteredList= new FilteredList<EntryData>(list ,e-> true);
        TextFiledFilter.textProperty().addListener((observable, oldValue, newValue) ->{
            filteredList.setPredicate((Predicate<?super EntryData>) EntryData->{


                if(newValue==null||newValue.isEmpty()){
                    return true;
                }
                String iid= String.valueOf(EntryData.getId());

                String tolowercase= newValue.toLowerCase();

                if (EntryData.getName().toLowerCase().contains(tolowercase)){
                    return  true;
                }


                else if(EntryData.getLastname().contains(tolowercase)){
                    return true;
                }
                else if (EntryData.getEmail().toLowerCase().contains(tolowercase)){
                    return true;
                }
                else if(EntryData.getAddress().toLowerCase().contains(tolowercase)){
                    return true;
                }

               else if(String.valueOf(EntryData.getId()).contains(newValue)) {
                    return true;
                }
               else if (String.valueOf(EntryData.getPhone_no()).contains(newValue)){
                    return true;
                }
                return false;
            } );
        });
        SortedList<EntryData> sortedList= new SortedList<>(filteredList);
        sortedList.comparatorProperty().bind(TableID.comparatorProperty());
        TableID.setItems(sortedList);
    }






    public void update() throws SQLException {

        factorySettings();

        ResultSet resultSet = null;
        try {
            resultSet = connection.createStatement().executeQuery("SELECT * FROM DemoFinal");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        while (resultSet.next()) {
            ids = resultSet.getInt("id");
            list.add(new EntryData(ids, resultSet.getDouble("phone_no"),
                    resultSet.getString("name"), resultSet.getString("lastname"), resultSet.getString("email_id"),
                    resultSet.getString("Address")));

        }

        TableID.getItems().addAll(list);

        resultSet.close();

    }


    @FXML
    void OnMenuFilter(ActionEvent event) {

        LabelFilter.setText("Filter");
        TextFiledFilter.setScaleX(1);
        TextFiledFilter.setScaleY(1);


    }

    @FXML
    void OnactionTextField(ActionEvent event) {

    }


    @FXML
    void keyRelesed(ActionEvent event) {


    }



}
包装样品;
导入javafx.collections.FXCollections;
导入javafx.collections.ListChangeListener;
导入javafx.collections.ObservableList;
导入javafx.collections.transformation.FilteredList;
导入javafx.collections.transformation.SortedList;
导入javafx.event.ActionEvent;
导入javafx.fxml.fxml;
导入javafx.fxml.Initializable;
导入javafx.scene.control.*;
导入javafx.scene.control.cell.PropertyValueFactory;
导入java.net.URL;
导入java.sql.Connection;
导入java.sql.PreparedStatement;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入java.util.ArrayList;
导入java.util.Objects;
导入java.util.ResourceBundle;
导入java.util.function.Predicate;
公共类DataController实现可初始化{
Config=new Config();
Connection=DatabaseConnection.getConnection();
int-id;
@FXML
私人区域地址;
@FXML
自有标签标签过滤器;
@FXML
私有文本字段文本文件过滤器;
@FXML
私有文本字段Lname;
@FXML
私有文本字段电话号码;
@FXML
专用按钮btnAdd;
@FXML
私有表列名;
@FXML
专用表列地址;
@FXML
私人电视台;
@FXML
私有表列emailid;
@FXML
私人电话号码;
@FXML
私有表列lastname;
@FXML
私有表列id;
@FXML
私人表格;
@FXML
私有文本字段mailId;
@FXML
私有菜单菜单文件;
@FXML
私人菜单栏菜单栏;
@FXML
私有菜单项菜单项过滤器;
@FXML
私有文本字段Fname;
@FXML
私有TableView TableID;
ObservableList=FXCollections.observableArrayList();
ObservableList FilterData=FXCollections.observableArrayList();
@FXML
void addBtnAction(ActionEvent事件)引发SQLException{
String query=“插入DemoFinal(id、姓名、姓氏、电话号码、电子邮件id、地址)值(?、、、、、?、?)”;
PreparedStatement=connection.prepareStatement(查询);
语句.setInt(1,++ids);
语句.setString(2,Fname.getText());
语句.setString(3,Lname.getText());
语句.setDouble(4,Double.parseDouble(PhoneNo.getText());
statement.setString(5,mailId.getText());
statement.setString(6,Address.getText());
语句。execute();
Fname.clear();
Lname.clear();
mailId.clear();
地址:clear();
PhoneNo.clear();
TableID.getItems().addAll(列表);
语句。close();
}
公共DataController()引发异常{
}
public void factorySettings(){
id.setCellValueFactory(新属性ValueFactory(“id”);
firstname.setCellValueFactory(新属性ValueFactory(“名称”);
setCellValueFactory(新属性ValueFactory(“lastname”);
phoneno.setCellValueFactory(新属性ValueFactory(“电话号码”);
emailid.setCellValueFactory(新属性ValueFactory(“电子邮件”);
地址:setCellValueFactory(新PropertyValueFactory(“地址”);
}
@凌驾
公共void初始化(URL位置、ResourceBundle资源){
if(连接!=null){
试一试{
DatabaseConnection.getConnection();
更新();
}捕获(例外e){
e、 printStackTrace();
}
}否则{
config.alert(alert.AlertType.ERROR,“数据库服务器可能已关闭,请检查日志”);
}
FilteredList FilteredList=新的FilteredList(列表,e->true);
TextFiledFilter.textProperty().addListener((可观察、旧值、新值)->{
filteredList.setPredicate((谓词

看起来你有一个方法,使用注册为关键事件侦听器的
ActionEvent
?你能发布FXML文件吗?是的,等一下。文件发布了!!!!所以我的评论是正确的,不是吗?好的,我明天早上3:30在我的国家检查一下。
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="716.0" prefWidth="1224.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.DataController">
   <center>
      <TableView fx:id="TableID" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
         <columns>
            <TableColumn fx:id="id" prefWidth="51.0" text="ID" />
            <TableColumn fx:id="firstname" prefWidth="133.0" text="First Name" />
            <TableColumn fx:id="lastname" prefWidth="106.0" text="Last Name" />
            <TableColumn fx:id="emailid" prefWidth="121.0" text="Email-Id" />
            <TableColumn fx:id="phoneno" prefWidth="75.0" text="Phone No" />
            <TableColumn fx:id="address" prefWidth="233.0" text="Address" />
            <TableColumn fx:id="Timee" minWidth="0.0" prefWidth="88.0" text="Time of entry" />
            <TableColumn fx:id="Datee" minWidth="0.0" prefWidth="132.0" text="Date of Entry" />
         </columns>
      </TableView>
   </center>
   <left>
      <VBox prefHeight="528.0" prefWidth="255.0" BorderPane.alignment="CENTER">
         <children>
            <TextField fx:id="Fname" promptText="First Name">
               <VBox.margin>
                  <Insets bottom="40.0" left="5.0" right="5.0" top="5.0" />
               </VBox.margin>
            </TextField>
            <TextField fx:id="Lname" promptText="Last Name">
               <VBox.margin>
                  <Insets bottom="40.0" left="5.0" right="5.0" />
               </VBox.margin>
            </TextField>
            <TextField fx:id="mailId" promptText="Email-Id">
               <VBox.margin>
                  <Insets bottom="40.0" left="5.0" right="5.0" />
               </VBox.margin>
            </TextField>
            <TextField fx:id="PhoneNo" promptText="Phone_No">
               <VBox.margin>
                  <Insets bottom="40.0" left="5.0" right="5.0" />
               </VBox.margin>
            </TextField>
            <TextArea fx:id="Address" prefHeight="200.0" prefWidth="200.0" promptText="Address">
               <VBox.margin>
                  <Insets left="5.0" right="5.0" />
               </VBox.margin>
            </TextArea>
            <Button fx:id="btnAdd" mnemonicParsing="false" onAction="#addBtnAction" text="Add">
               <VBox.margin>
                  <Insets left="180.0" top="20.0" />
               </VBox.margin>
            </Button>
         </children>
      </VBox>
   </left>
   <top>
      <MenuBar fx:id="MenuBar" BorderPane.alignment="CENTER">
        <menus>
          <Menu fx:id="menuFile" mnemonicParsing="false" text="File">
            <items>
              <MenuItem fx:id="MenuItemFilter" mnemonicParsing="false" onAction="#OnMenuFilter" text="Filter" />
                  <MenuItem mnemonicParsing="false" text="Close" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Edit">
            <items>
              <MenuItem mnemonicParsing="false" text="Delete" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Help">
            <items>
              <MenuItem mnemonicParsing="false" text="About" />
            </items>
          </Menu>
        </menus>
      </MenuBar>
   </top>
   <bottom>
      <HBox BorderPane.alignment="CENTER">
         <children>
            <Label fx:id="LabelFilter" />
            <TextField fx:id="TextFiledFilter" onAction="#OnactionTextField" onKeyReleased="#keyRelesed" scaleX="0.0" scaleY="0.0" />
         </children>
         <BorderPane.margin>
            <Insets bottom="20.0" left="255.0" />
         </BorderPane.margin>
      </HBox>
   </bottom>
</BorderPane>