JTextField でエスケープ文字を処理する簡単な方法があるかどうか疑問に思っていました。問題は、 getText() がエスケープ文字をエスケープすることです。もちろん、これはほとんどの場合に推奨される動作ですが、ユーザーが CSV ファイル (\t を含む) の区切り文字を自由に指定できるようにする場合はそうではありません。何か案は?
ボブ
JTextField でエスケープ文字を処理する簡単な方法があるかどうか疑問に思っていました。問題は、 getText() がエスケープ文字をエスケープすることです。もちろん、これはほとんどの場合に推奨される動作ですが、ユーザーが CSV ファイル (\t を含む) の区切り文字を自由に指定できるようにする場合はそうではありません。何か案は?
ボブ
Swing コンポーネント内のすべてのパブリック関数の動作をいつでもオーバーライドできます。それを「スペシャリゼーション」と呼んでいます。たとえば、独自のクラスを作成してメソッドMyJTextField
をオーバーライドできます。getText()
これはあなたにとって少し遅いかもしれませんが、その問題に対する簡単な解決策を見つけました:
JTextfield field = new JTextField();
/*someone puts a string into it*/
escapeFulString = field.getText().replace("\\t","\t");
System.out.println(escapeFulString);
これにより、その文字列がすべてのタブとともに出力されます。他のエスケープ シーケンスを追加するには、同じプロセスを実行します。Java 文字列メソッドはその場で編集しないことを忘れないでください。
text.replace("\\t","\t")
//is not the same as
text = text.replace("\\t","\t");
JTextField はビューにすぎないため、常にモデルが内部にあり、このモデルはDocument
クラスです。これを試すことができます:
JTextField f = new JTextField();
// your JTextField is being filled somehow with text ...
Document document = f.getDocument();
try {
String text = document.getText(0, document.getLength());
} catch (BadLocationException ex) {
}
おそらく、インスタンスではなくインスタンスからテキストを収集するDocument
とJTextField
、エスケープされません。