Java 当试图通过应用filterlist和sortedlist来筛选可观察列表时,表列中的值会被交换
我正在创建一个gatepass软件,它使用tableview直接向MYSQL数据库添加数据,我添加了一个search textField来从中搜索条目 每当我使用这个文本字段搜索时,一切都正常,但在后台,这些错误就会出现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
"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>