それは長い質問になるので、我慢してください:)
私のアプリケーション
次のことを行う Java (JFrame GUI を使用) デスクトップ アプリケーションを開発しています。
- (.txt) ファイルをスキャンします。
- これらのファイルからいくつかの数値を解析し、いくつかの計算を実行して、最終的に結果を String 変数に格納します。
- これらの数値を特別な (テーブル) 形式で出力します。(注: 形式には一部の Unicode (アラビア語) 文字が含まれています。)
問題
最初の 2 つの部分はスムーズに進みました。しかし、第 3 部 (フォーマットされた出力) に来たとき、この特殊なフォーマットを表示する方法がわからなかったので、
- Java で特別な形式の出力 (テーブル) を表示する最良の方法は何ですか?
注:テーブルを適切にサポートしていないため、フォーマッターは役に立ちません。
解決策 1:
調査の結果、「html」などの特殊な形式を表示できる JEditorPane を使用できることがわかりました。そこで、必要な (テーブル) フォーマットで「html」ページを作成し、このページを [JEditorPane][4] に表示することにしました。私はそれを行い、いくつかのhtml要素の値をそれらの(.txt)ファイルから解析された数値に変更したくなるまでスムーズに進みました。
- html 要素 (例:
<td></td>
) にアクセスしてその値を変更するにはどうすればよいですか?
(.html) は、 を使用して JEditorPane 内にロードされることに注意してくださいsetPage(url)
。
Unicode 文字は正しく表示されますが、一部の要素の値を変更できませんでした (たとえば、 の値を に変更し<td> 000,000,000 </td>
たい<td> MainController.getCurrentTotalPayment() </td>
解決策 2:
HTMLDocument と HTMLEditorKit を使用する方法で、HTMLEditorKit を使用して (.html) を最初から作成し、.html を使用して JEditorPane に表示できますkit.insertHTML
。
上記の方法を使用してコンテンツを正常に追加しました。また、(MainController) クラスに格納されているため、(.txt) ファイルから解析された数値を追加することもできました。残念ながら、Unicode のアラビア文字は正しく表示されませんでした。
- これらの Unicode 文字を正しく表示するにはどうすればよいですか?
したがって、最初のソリューションには html 要素へのアクセスがなく、2 番目のソリューションには Unicode サポートがありません!
私の同僚は、私の MainController.java クラスにアクセスできる HTML ドキュメントで JSP コードを使用するようにアドバイスしてくれました。したがって、html 要素が既に変更された状態でページを JEditorPane にロードします。JSP の助けを借りずにそれを行う方法はありませんか?
JTidyの使用を推奨する人もいますが、Java の JDK 内でそれを行う方法はありませんか?
私はすべての可能な解決策を受け入れます。助けてください。
My Code:一部のコード コンテンツは関連性がないため省略されました
MainController.java
class MainController
{
private static String currentTotalPayment;
public static void main(String[] args)
{
CheckBankFilesView cbfView = new CheckBankFilesView();
cbfView.setVisible(true);
}
public static void setCurrentTotalPayment(String totalPayment) {
MainController.currentTotalPayment = totalPayment;
}
public static String getCurrentTotalPayment() {
return currentTotalPayment;
}
}
MyFormattedOuputSolutionOne.java:
public class MyFormattedOuputSolutionOne extends javax.swing.JFrame {
private void MyFormattedOuputSolutionOne() {
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
myFormattedOuput = new javax.swing.JEditorPane();
myFormattedOuput.setContentType("text/html");
//myFormattedOuput.setContentType("text/html; charset=UTF-8"); //Doesn't seem to work
myFormattedOuput.setEditable(false);
jScrollPane1.setViewportView(myFormattedOuput);
myFormattedOuput.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
try{
myFormattedOuput.setPage(getClass().getResource("resources/emailFormat2.html"));
//How can I edit/change html elements loaded in 'myFormattedOuput'?
}catch(Exception e){
}
}
}
MyFormattedOuputSolutionTwo.java:
public class MyFormattedOuputSolutionTwo extends javax.swing.JFrame {
private void MyFormattedOuputSolutionTwo() {
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
myFormattedOuput = new javax.swing.JEditorPane();
myFormattedOuput.setContentType("text/html");
//myFormattedOuput.setContentType("text/html; charset=UTF-8"); //Doesn't seem to work
myFormattedOuput.setEditable(false);
jScrollPane1.setViewportView(myFormattedOuput);
HTMLEditorKit kit = new HTMLEditorKit();
HTMLDocument doc = new HTMLDocument();
myFormattedOuput.setEditorKit(kit);
myFormattedOuput.setDocument(doc);
myFormattedOuput.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
try{
// Tried to set the charset in <head> but it doesn't work!
//kit.insertHTML(doc, 1, "<meta http-equiv = \"Content-Type\" content = \"text/html; charset=UTF-8\">", 0, 0, HTML.Tag.META);
kit.insertHTML(doc, doc.getLength(), "<label> السلام عليكم ورحمة الله وبركاته ,,, </label>", 0, 0, null); //Encoding problem
kit.insertHTML(doc, doc.getLength(), "<br/>", 0, 0, null); // works fine
kit.insertHTML(doc, doc.getLength(), MainController.getCurrentTotalPayment(), 0, 0, null); // works fine
//How can I solve the Unicode problem above?
}catch(Exception e){
}
}
}
htmlFormatTable.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8">
</head>
<body>
<label> السلام عليكم ورحمة الله وبركاته ,,, </label>
<br/>
<label> الأخوة الكرام نفيدكم بتفاصيل المدفوعات لشهر </label> XX/143X </label> هـ كما هو موضح ادناه </label>
<br/>
<table align="right" border="1" width="600" cellpadding="5" cellspacing="0">
<tr char="utf-8" bgcolor="cccccc" align="center">
<td colspan="3"> <label> تفاصيل مدفوعات بنك الرياض </label> <img src="..\images\riyadh.gif" width="65" height="15"/> </td>
</tr>
<tr align="center">
<td></td>
<td id="cell1">0,000,000.00</td>
<td align="right"> معاشات </td>
</tr>
<tr align="center">
<td></td>
<td id="cell2">0,000,000.00</td>
<td align="right"> أخطار </td>
</tr>
<tr align="center">
<td bgcolor="cccccc"> المجموع </td>
<td bgcolor="cccccc"> 0,000,000.00 <label> ريال سعودي </label> </td>
<td></td>
</tr>
</table>
<br/>
<label> شاكرين لكم حسن تعاونكم ...... </label>
<br/>
<label> فريق العمليات بقسم الحاسب الآلي </label>
</body>
</html>
私の長い複数の質問スレッドを読んでくれてありがとう。あなたの答えが待ちきれません。
アップデート:
この洞察を提供してくれた @Howard に感謝します。アラビア文字を対応する Unicode (例: ب = \u0628) に置き換えると問題なく動作しますが、各文字を置き換える必要なくそれを行う方法が必要ですよね?