java - 文本字段阿拉伯语输出显示奇怪的字符 javaFX
问题描述
我正在使用 javaFX 开发桌面应用程序,我正在使用场景构建器版本 11 创建包含 TextFields 和 ChoiceBox 的界面,我的输入应该设置为 Arabic。问题是当我从 TextFiled 或 ChoiceBox 检索文本并在控制台中打印它时,它会显示像“بننلنلن”这样的字符,并且还会产生存储问题数据库中的输入,这是 SQLException:java.sql.SQLSyntaxErrorException:您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册,以获取在 'بنن٠附近使用的正确语法„نلن,نبلنبنلب,2021-06-30,أمر جزائي,تما٠„تبليغ</p>
当我尝试另一个没有场景构建器的项目时,我得到了正确的阿拉伯语输出,场景构建器可能是问题的根源吗?
这是我的 fxml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.control.DatePicker?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<AnchorPane id="AnchorIns" prefHeight="529.0" prefWidth="523.0" stylesheets="@newinsc.css" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="newInsc.NewInscController">
<children>
<VBox fx:id="boxContainer" layoutX="139.0" layoutY="99.0" prefHeight="273.0" prefWidth="245.0">
<children>
<HBox alignment="CENTER_RIGHT" prefHeight="42.0" prefWidth="245.0">
<children>
<TextField fx:id="firstNameTxtField" alignment="CENTER_RIGHT" />
<Label alignment="CENTER_RIGHT" contentDisplay="RIGHT" prefHeight="17.0" prefWidth="71.0" stylesheets="@newinsc.css" text="الاسم" />
</children>
</HBox>
<HBox alignment="CENTER_RIGHT" prefHeight="42.0" prefWidth="245.0">
<children>
<TextField fx:id="lastNameTxtField" alignment="CENTER_RIGHT" />
<Label prefHeight="17.0" prefWidth="71.0" text="اللقب" />
</children>
</HBox>
<HBox alignment="CENTER_RIGHT" prefHeight="42.0" prefWidth="245.0">
<children>
<ChoiceBox fx:id="docTypeChoice" prefWidth="150.0" />
<Label prefHeight="17.0" prefWidth="71.0" text="نوع التبليغ" />
</children>
</HBox>
<HBox alignment="CENTER_RIGHT" prefHeight="42.0" prefWidth="245.0">
<children>
<DatePicker fx:id="dateField" prefHeight="25.0" prefWidth="149.0" />
<Label prefHeight="17.0" prefWidth="71.0" text="التاريخ" />
</children>
</HBox>
<HBox alignment="CENTER_RIGHT" prefHeight="42.0" prefWidth="245.0">
<children>
<ChoiceBox fx:id="tablighCase" prefWidth="150.0" />
<Label prefHeight="17.0" prefWidth="71.0" text="حالة التبليغ" />
</children>
</HBox>
<HBox alignment="CENTER" onMouseClicked="#cancelBtnClicked" prefHeight="46.0" prefWidth="245.0">
<children>
<Button fx:id="cancleBtn" mnemonicParsing="false" onMouseClicked="#cancelBtnClicked" text="الغاء">
<HBox.margin>
<Insets right="16.0" />
</HBox.margin>
</Button>
<Button fx:id="saveInscBtn" mnemonicParsing="false" onMouseClicked="#registerBtnClicked" text="تسجيل" />
</children>
</HBox>
</children>
</VBox>
</children>
</AnchorPane>
这是我的控制器文件:
package newInsc;
import DB.dbConnection;
import java.net.URL;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.LocalDate;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
* FXML Controller class
*
* @author asus
*/
public class NewInscController implements Initializable {
@FXML
private ChoiceBox<String> docTypeChoice;
@FXML
private ChoiceBox<String> tablighCase;
@FXML
private DatePicker dateField;
@FXML
private Button saveInscBtn;
@FXML
private TextField firstNameTxtField;
@FXML
private TextField lastNameTxtField;
@FXML
private Button cancleBtn;
private Connection c;
private Statement s;
@FXML
private VBox boxContainer;
@Override
public void initialize(URL url, ResourceBundle rb) {
docTypeChoice.getItems().add("أمر جزائي");
docTypeChoice.getItems().add("حكم جزائي" );
docTypeChoice.getItems().add("تكليف بالحضور" );
docTypeChoice.getItems().add("قرار جزائي" );
tablighCase.getItems().add("تم التبليغ");
tablighCase.getItems().add("ترك اشعار");
tablighCase.getItems().add("عدم التمكن من التبليغ");
}
@FXML
private void cancelBtnClicked(MouseEvent event) {
Stage s = (Stage) cancleBtn.getScene().getWindow();
}
@FXML
private void registerBtnClicked(MouseEvent event) {
try {
String query;
String fname = firstNameTxtField.getText();
String lname = lastNameTxtField.getText();
LocalDate date = dateField.getValue();
String docType = docTypeChoice.getValue();
String state = tablighCase.getValue();
query = "insert into infotable values " + fname + "," + lname + "," + date+ ","+ docType+"," +state ;
dbConnection dbc = new dbConnection();
s = dbc.createConnection().createStatement();
s.execute(query);
s.close();
} catch (SQLException ex) {
Logger.getLogger(NewInscController.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
解决方案
我可以找到一个解决方案,在运行程序之前,我首先使用F9 键编译它,然后使用组合键 SHIFT + F6运行它
推荐阅读
- c# - 如果我在 Teams Call 中,创建 Team Graph Api 会失败
- c++ - 如何从 C++ 中的依赖类型中获取它所依赖的类型
- java - 在 ValueProperty 和数据检索中的 JavaFX 中的表视图中发现错误
- laravel - laravel 护照登录在应用程序中总是失败,但在邮递员中成功但成功
- sql-server - SQL Server 中的数据透视表
- javascript - 如果我的 Jquery 数据表具有动态数据/列,我如何更改任何列日期时间格式
- django - Django,预取相关引发关键错误
- go - 未知标志:--go_opt 在重新生成 gRPC 代码时
- amazon-web-services - 克隆处于休眠状态的 EC2 实例
- lucene - 如何在Lucene的搜索结果中返回多值字段的索引?