• 締切済み

マウスで選んだ部分を太字にして保存した後、そのファイルを読み込むと太字になっていない。

今、ワードプロセッサを作っています。 このアプリケーションは「読み込み、保存、太字」のボタンをもっています。 ファイルチューザーを使い、ファイルを保存、読み込みは出来るのですが、一つ問題があります。 テキストに書き込んで、マウスで選んだ部分の文字を太字にした後、デスクトップに保存し、それをまた「読み込み」ボタンで読み込むと、太字で保存したはずの文字が太字になっていないのです。 タグを使うと簡単に出来ると言われたのですが、webアプリケーションではないのに、使えるのでしょうか? タグを使う方法、その他、こうすると簡単という方法がありましたら、教えてください。よろしくおねがいします。

みんなの回答

回答No.3

>私は保存の時点でtxtArea.getText() ←(コードの中ではtxtAreaと書いていますが、textPaneを使っています。) でStringを取得し、ファイルに保存しているのですが、それで、正しいのでしょうか? 当然ただ文章を保存するためには間違いではないですが、No.1さんが書かれているようにStringに文字のフォント情報などは入らないので、今回の場合においては条件をみたさないと思います。 >保存した今のこの時点で、ファイル自体が太字になっているのでしょうか? Stringには太字などの情報は入らないので、単なる文字情報です。というか、保存したファイルをメモ帳か何かで実際に見てみたらどうですか? >freedom560さんのやり方では、保存したVectorの中身をどのようにして、もう一度、txtPaneに表示させるのですか? あまり深くは考えていませんが、NormalクラスとBoldクラスのスーパークラスを作って、スーパークラスにsetCharacterAttributesを呼び出すようなメソッドを入れておいて、forループ中でそのスーパークラスにキャストしてそのメソッドを呼び出すのでしょうか。実際作っているわけではないので、うまくいくかはわかりません。 参考ですが、以下にほぼ同様のものを作っているサイトを見つけました。 どうやら、タグで保存せずにリッチテキストフォーマット形式で保存するRTFEditorKitクラスなるクラスが存在するようです。(自分もはじめて知りました) 保存時にRTFEditorKitクラスのwriteメソッド、読み込むときにreadメソッドが呼び出されていることを確認してください。この方法を使うのが一番早そうですね。(というか、このソースをコピペすると一番早そうですw)

参考URL:
http://www.javadrive.jp/tutorial/appli/word/index7.html
noname#120822
質問者

お礼

私も、このサイトをみて問題解決しました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

>タグを使うと簡単に出来ると言われたのですが、webアプリケーションではないのに、使えるのでしょうか? もちろん使えます。 例えば「あいうえお」で「う」だけを太字にしたいのなら、 あい<b>う</b>えお として保存すればよいのです。そして、このテキストデータを読み込む際にタグ情報をうまく読み込みます。(ここで作りこみが必要です。) あなたが作ったワードプロセッサでどのようにして太字情報を管理しているのかわかりませんが、例えば、 class Normal { String str; } class Bold { String str; } を用意して、ひたすらVectorに代入して文字を作っていたとしたら、読み込むときに Vector vec=new Vector(); BufferedReader br=~; String str=br.readLine(); while(str.indexOf("<b>")>0 && str.indexOf("</b>")>str.indexOf("<b>")) { Normal normal=new Normal(); normal.str=str.substring(0,str.indexOf("<b>")-1); Bold bold=new Bold(); bold.str=str.substring(str.indexOf("<b>"),str.indexOf("</b>")); vec.add(normal); vec.add(bold); str=str.substring(str.indexOf("</b>")+4); } vec.add(str); のようにしてタグを読み込んでいけばいいわけです。(ソースはイメージなので、コンパイルが通るかとか、ロジックが正しいかというのはわかりません) ちなみに、タグを使うとすると、ワードプロセッサ上に"<b>"などの文字が入れられたときのことを考え、"<"や">"をサニタイジングすることが必要になるでしょう。

noname#120822
質問者

補足

お返事ありがとうございます。私は保存の時点でtxtArea.getText() ←(コードの中ではtxtAreaと書いていますが、textPaneを使っています。) でStringを取得し、ファイルに保存しているのですが、それで、正しいのでしょうか? 保存した今のこの時点で、ファイル自体が太字になっているのでしょうか? 私は、保存の時点で何かがおかしいと思い、BufferedWriterを使ってどうにか解決しようとしたのですが、うまくいかず。。。いきづまっています。 freedom560さんのやり方では、保存したVectorの中身をどのようにして、もう一度、txtPaneに表示させるのですか? 下にコードを載せてみたのですが、、よかったら見てください。 長くてすみません。。。よろしくお願いします。 public class MyListener implements ActionListener, ConstantsIF { //Field private MyGUI myGui; private int dialog; private boolean onOffBold = false; private boolean onOffItalic = false; private boolean onOffUnderLine = false; Style selectedText; //constructor public MyListener(MyGUI gui) { myGui = gui; } //end constructor public void actionPerformed(ActionEvent e) { // MutableAttributeSet attr = new SimpleAttributeSet(); JFileChooser fChooser = new JFileChooser(); try { if (e.getSource() == myGui.btnOpenFile) { dialog = fChooser.showOpenDialog(myGui); if (dialog == JFileChooser.APPROVE_OPTION) { File fileName = fChooser.getSelectedFile(); BufferedReader bReader = new BufferedReader(new FileReader(fileName)); myGui.txtArea.read(bReader, null); bReader.close(); } //end if } //end if else if (e.getSource() == myGui.btnSave) { dialog = fChooser.showSaveDialog(myGui); if (dialog == JFileChooser.APPROVE_OPTION) { File fileName = fChooser.getSelectedFile(); BufferedWriter bWriter = new BufferedWriter(new FileWriter(fileName)); String txt = myGui.txtArea.getText(); String text = "<html><body><b>"+ "\n"; text += txt + "\n"; text += "</b></body></html>"; bWriter.write(text); bWriter.close(); } //end if } //end else if else if (e.getSource() == myGui.btnClearAll) { myGui.txtArea.setText(CLEAR); } //end else if else if (e.getSource() == myGui.btnBold) { onOffBold = !onOffBold; // selectedText = styleContext.addStyle("selectedText", defaults); //myGui.txtArea.setCharacterAttributes(selectedText, false); if (onOffBold) { StyleConstants.setBold(myGui.attr, true); } //end if else { StyleConstants.setBold(myGui.attr, false); } //end else // myGui.txtArea.setCharacterAttributes(selectedText, false); } //end else if } //end try catch (IOException ioException) { JOptionPane.showMessageDialog(null, ioException, "ERROR", JOptionPane.WARNING_MESSAGE); } //end catch() } } //end class MyListener

全文を見る
すると、全ての回答が全文表示されます。
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>今、ワードプロセッサを作っています。 テキストファイルには、文字の修飾情報はありません。 (保存できるのは、文字コードのみです) どのような仕様にするのかは貴方が決めて、その機能を実装すれば全て解決します。 修飾情報を保存したいのなら、独自フォーマットのファイルを作成して修飾情報等を一緒に保存してください。 (もしくは、rtf型式などで保存) http://ccfa.info/kakucyousi/qrst/r/rtf.html >タグを使うと簡単に出来ると言われたのですが ブラウザで表示させれば良いだけです。 「ワードプロセッサ」にはなりませんけど、HTML保存を標準にすれば、HTMLエディタにはなるかも知れませんが・・・。

noname#120822
質問者

お礼

お返事ありがとうございました。 RTFEditorKitを使うことによって解決できました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • <th>タグを使っても太字にしない方法は

    テーブルの中の<th>タグで囲った文字は太字になりますが <th>タグを使っても太字にしない方法はありますか?

    • ベストアンサー
    • HTML
  • wordで太字で筆字のように。

    お願いします。 頼まれて定年退職の謝辞をかいております。word2000を利用しています。 文字を太字で筆字のようにしたいのですが上手くいきません。ツールバーにある太字ボタンを使用しました。ですが更に太くしたいのです。 イメージでいくと賞状に書かれているような太字で筆字のようにしたいです。フォントはサイズが大きくなるだけで困っています。 ご指導お願いします。

  • ワードで複数行を簡単に太字に出来ますか?

    ワードで大量の文章を作成したのですが 現在のスタイルは ・○○○  □□□□□□□□□□□□□□□□□ ・○○○○○  □□□□□□□□□□□□□□□□□ みたいな感じで見出しがあって 次の行に説明が入っています。 この見出しの部分を全ての文章太字にしたいのですが簡単に出来る方法をご存知の方いらっしゃいませんでしょうか? バージョンは2000です。 ワードの知識が浅く、現在は文字を選択して 一回一回 B のボタンを押して太字にしています。

  • アプリケーションを作成したいのですが…教えてください!!アドバイス等なんでも結構です!!

    アプリケーションを作りたいと思っているのですが、どうやって作って良いのか…途方にくれています。 作りたいアプリケーション自体は複雑なものではなく、添付の図のように、WEBのリンクボタンを押すとそのリンク先が隣に表示され、そのリンク先に関連のあるテキスト(ワード等)をさらに隣に表示させる。というものです。 ワード等をhtmで保存して可能だったんですが、直接そのアプリ上で文字を入力して保存もしたいのです。 なにかいい方法はないでしょうか?

  • ファイルが見当たりません

    教えてください。 今、ワードで入力をして、それをテキストでデスクトップに保存したのですが、保存したはずのファイルがデスクトップ上にありません。 検索をかけたら、間違いなくデスクトップに保存されているのですが、デスクトップ上にそのファイルのアイコンが見当たりません。 教えてください。

  • Wordでルビの一部を太字にすることはできますか

    Word2002を使っています。 ルビ(ふりがな)を設定する際に、一部の文字だけを太字にすることは可能でしょうか。 フィールドコードを表示して、一部の文字を選択して太字「B」にしたりフォントを変えてみたのですが、非表示にしてみると反映されていません。印刷してみてもやはり太字にはなってませんでした。 何かいい方法があれば教えていただけませんか。

  • ファイル保存のしくみ

    お世話になります。 エクセルもワードも同じとは思いますが、 ファイルサイズが大きいと、読み込みにも保存にも時間が掛かります。 保存についてですが、例えば1文字変更した場合も、ファイル全文字数分が上書き保存されるのでしょうか? オフィスのバージョンで違いはありますか? 変更した場所だけ上書き保存されれば、時間短縮で助かるのですが、

  • PhotoShopで太字しか入力できなくなりました!

    PhotoShop6を使っているのですが、突然太字しか入力できなくなってしまいました。 パレットで見るとbold指定になっていないのに、見た目はboldで、しかもワープテキストをしようとすると「要求された動作を完了できません。文字レイヤは太字を使用しています」と出るのです・・・。 原因が全くわかりません。 解決方法をご存知の方、いらっしゃいませんか!?

  • ファイルの保存場所を変えたい

     テキストエディタ 「 metapad ver.3.5 」を使っています。  「 名前を付けて保存 」の「 保存する場所 」が、デフォルトでアプリケーションフォルダになっています。これをデスクトップ、または任意の場所に変更する方法があればお聞かせ下さい。  使用OS Windows XP Home

  • 保存したword2007が表示されません

    以前デスクトップに保存したワードを開くと 文書が表示されません。 (ホーム、挿入、ページレイアウト等のタグは表示されていますが そのタグのボタンは全て使用できない状態です) 他に保存したワードを開いても 文書が表示されず、 新規ワードで文書を作り保存し、 保存した文書を開けても同様な画面となります。 どの様に修復したら良いのでしょうか? ご存知の方、教えてください。 宜しくお願いします。