首页 > 解决方案 > 文本字段阿拉伯语输出显示奇怪的字符 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);
        }
        
    }


    
}

标签: javajavafxscenebuilder

解决方案


我可以找到一个解决方案,在运行程序之前,我首先使用F9 键编译它,然后使用组合键 SHIFT + F6运行它


推荐阅读