- ベストアンサー
javaでテキストの改行表示について困っています
- javaを用いて、プログラムを作成中です。
- テキストの改行表示方法について困っています。
- 具体的なソースコードも載せて質問しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
あいや、setTextメソッドが innerHTMLを使っているのか、innerTextを使っているのかが知りたかったのです。 (両方使ってないかもしれない) 方向が変わってしまって申し訳ないのですが、 辞書内の文字列が "文字列" + "\r\n" + "文字列" だとjava内でエスケープ文字が解決されてしまうので "文字列" + "\\r\\n" + "文字列" とし、"\"自体をエスケープしないとHTMLで"\"が書けないような気がしますね。
その他の回答 (3)
- potluckker
- ベストアンサー率55% (22/40)
#1,2です。 全容がわからないのでなんともいえませんが >>eng.setText(ei); >>spa.setText(supe); このsetText()メソッドは自作のものですか? 実際にHTMLに文字列を描画するときに"innerHTML"を使用していませんか? innerHTMLでは、エスケープ文字や数字、実態参照文字を入力しても、 そのまままの"文字列"、または半角空白?が描画されるようです 解決後の文字を描画したいときはinnerTextを使用してください。 innerTextに "あああ\r\nいいい"と突っ込んだらうまくいきました。
補足
あまり長たらしくなってもいけないと思い該当部分のみコードを記載しましたが、全容は以下の通りです。 import java.applet.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.*; public class reference extends Applet implements ActionListener{ Button Honyaku, Clear; TextField jap, eng; TextArea spa; String wrs; String nichi, ei, supe; public void init(){ setBackground(new Color(200, 200, 200)); add(new Label("[ japanese ]")); jap = new TextField("", 30); add(jap); add(new Label("[ english ]")); eng = new TextField("", 30); add(eng); Honyaku = new Button("スペイン語に翻訳"); Honyaku.addActionListener(this); add(Honyaku); Clear = new Button("ウィンドウ内を消去"); Clear.addActionListener(this); add(Clear); add(new Label("[ spanish ]")); spa = new TextArea("", 5, 30); add(spa); } public void actionPerformed(ActionEvent e){ try{ if(e.getSource() == Honyaku){ BufferedReader wordsfile = new BufferedReader(new FileReader("Z:/09sotsuron/words.txt")); while ((wrs=wordsfile.readLine())!= null){ StringTokenizer st = new StringTokenizer(wrs," * "); nichi ="" + st.nextToken(); ei ="" + st.nextToken(); supe = "" + st.nextToken(); if ((jap.getText()).equals(nichi)){ eng.setText(ei); spa.setText(supe); } else if ((eng.getText()).equals(ei)){ jap.setText(nichi); spa.setText(supe); } } wordsfile.close(); } else if(e.getSource() == Clear){ nichi = ""; ei =""; supe = ""; jap.setText(nichi); eng.setText(ei); spa.setText(supe); } } catch(IOException ie){ System.exit(1); } } } で、単語ファイルのほうが 一 * one * uno 二 * two * dos … となっています。 で、コンパイルしてできたreference.classをHTML中で <applet code="reference.class" width="280" height="350"></applet> で読み込んで実行しています。
- potluckker
- ベストアンサー率55% (22/40)
>> 一 * one * UNO\r\n[数]一つの >> 二 * two * DOS\r\n[数]二つの 注釈も同辞書内にあるのですね >>注釈とする別のtxt辞書を作ればよいのでしょうか?アノテーション>>というのは使ったことがなくよくわかりませんが… getAnnotationというのは適当に書いただけです、すみません。 私もよくわかりません。 文字列に対応する文字列を引っ張ってくる、というメソッドがあるなら それを利用して指定したスペイン語文字列から対応する注釈文字列 をもってくるのかな? と思っただけです。そうすれば、スペイン語と注釈文字列もばらばらに使えてなんとなく気持ちがいいですし。 >>ちなみにプログラムはHTMLに表示しています。 HTMLに表示しているのならば\nを連結するだけでいいんじゃないかなぁ と思いましたが、 javascriptを使用して、<textarea></textare>のinnerHTMLに "文字列" + "\n" + "文字列" を突っ込んだところ、FireFox、Google chromeでは正常に改行されましたが、 IE7では改行されませんでした うーん。 IEのバージョンはなんでしょうか?
補足
innerHTMLというのも少し調べてみます。 IEのバージョンは7です。
- potluckker
- ベストアンサー率55% (22/40)
ちょっとよくわからないんですが 英語とスペイン語が対応しているtxt辞書から引っ張り出して 該当するスペイン語を表示させているのですよね? 注釈となる文字列を引き出すのに、スペイン語と注釈とが対応しているtxt辞書があるのかどうかわかりませんが String antatSpa = ""; antatSpa = spa.getAnnotation(supe); supe = supe + "\n" + antatSpa; spa.setText(supe); とかでできるんじゃないでしょうか。 これはHTMLに表示しているのですか? HTMLに表示する文字列を生成するのならば supe = supe + "<br />" + antatSpa; でどうでしょう。
補足
ちょっと説明が悪かったです、すみません 現状は、txtファイルは 一 * one * UNO 二 * two * DOS となってまして、これを 一 * one * UNO\r\n[数]一つの 二 * two * DOS\r\n[数]二つの といったように同じtxt辞書内にある注釈を改行して表示できないか、という質問です。上記の\r\nではできませんでした 注釈とする別のtxt辞書を作ればよいのでしょうか?アノテーションというのは使ったことがなくよくわかりませんが… ちなみにプログラムはHTMLに表示しています。
補足
"文字列1" + "\\r\\n" + "文字列2" で実行すると "文字列1" 、 文字列1 + "\\r\\n" + 文字列2 で実行すると 文字列1 と表示されました。 解決できませんでしたが、とりあえず保留して他の部分に移ろうと思います。 色々有難うございました。