StyleConstants.setLineSpacing が動かない

このQ&Aのポイント
  • Windows VISTA 上で JDK1.6.0_01 / JRE1.6.0_01 で Java プログラムを作っております。
  • javax.swing.JTextPane にてテキストを描画しているのですが、setLineSpacing と setFirstLineIndent が表示上有効になってくれないようです。
  • 設定値は正しく指定されており、他の属性は正常に変更できていますが、setLineSpacing や setFirstLineIndent は動作していないようです。
回答を見る
  • ベストアンサー

StyleConstants.setLineSpacing が動かない

Windows VISTA 上で JDK1.6.0_01 / JRE1.6.0_01 で Java プログラムを作っております。 javax.swing.JTextPane にて次のようにテキストを描画しているのですが、setLineSpacing と setFirstLineIndent が表示上有効になってくれないようです。 JTextPane pane = new JTextPane(); SimpleAttributeSet defaultAttributeSet = new SimpleAttributeSet(); StyleConstants.setFontSize(defaultAttributeSet, 24); StyleConstants.setFirstLineIndent(defaultAttributeSet, (float)24); StyleConstants.setLineSpacing(defaultAttributeSet, (float)24); StyledDocument doc = pane.getStyledDocument(); doc.insertString(doc.getLength(), "test\ntest", defaultAttributeSet); getLineSpacing や getFirstLineIndent で見ると defaultAttributeSet に数値はちゃんと設定されています。また、同様に設定している setFontSize は有効で指定したサイズにちゃんと変更できています。コールの順番を変えても変化はありません。また、setLeftIndent や setRightIndent も表示上変化がありませんでした。 上記、何がまずいでしょうか。

  • Java
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.1
beubeu
質問者

お礼

フォローありがとうございます。 うーん、気がつきませんでした。まさにそれでした。 pane.setParagraphAttributes(defaultAttributeSet, true); を入れることにより、行間やインデントを設定できるようになりました。 ありがとうございました。

関連するQ&A

  • StyledDocumentの背景色の不具合

    標記の件、JTextPaneにDefaultStyledDocumentを設定して、テキスト編集環境を 構築していますが、デフォルトでのフォントの背景色が正しく取得できません。 フォントのデフォルトの背景色は見た目には白なのですが、 取得される背景色は黒(r=0,g=0,b=0,a=255)になってしまっています。 背景色を適当に設定すると、その部分の色は正しく反映されます。 マニュアルで背景色を黒く設定しているのか、無設定で背景色が黒として取得されて いるのかの判別方法がなく困っております。 以下、サンプルコードを示します。 対処法をご存知の方がおられましたら、よろしくお願いいたします。 import java.awt.Color; import javax.swing.JFrame; import javax.swing.JTextPane; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.DefaultStyledDocument; import javax.swing.text.MutableAttributeSet; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; import javax.swing.text.StyleContext; import javax.swing.text.StyledDocument; public class StyledDocumentText { public static void main(String[] args) { final StyledDocument document = new DefaultStyledDocument(new StyleContext()); JTextPane textPane = new JTextPane(document); textPane.addCaretListener( new CaretListener(){ public void caretUpdate(CaretEvent e) { // キャレット位置の背景色を取得し、コンソール出力 AttributeSet a = document.getCharacterElement(e.getDot()).getAttributes(); Color background = StyleConstants.getBackground(a); System.out.printf( " %s a=%d\n", background ,background.getAlpha() ); } } ); // テキスト挿入 try { document.insertString(0, "abcdefg", null); } catch (BadLocationException e) { e.printStackTrace(); } // マニュアルで背景色を設定 MutableAttributeSet attr = new SimpleAttributeSet(); StyleConstants.setBackground(attr, new Color(255,100,50,230) ); document.setCharacterAttributes( 2, 3, attr, false); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add( textPane ); frame.setSize( 300, 300 ); frame.setVisible( true ); } }

  • JEditorPaneで表示したHTMLを、初期化/変更するには

    プログラム中で生成したHTMLを随時、JEditorPaneに表示しようとしています。また、表示したHTMLをすべて消す(初期化する)こともあります。 以下のようなコードを書いたのですが、うまくいきません。 1.画面が初期化されませんし、初期化した後は追加もされなくなります。 2.追加するとHTMLタグが解釈されずに、そのまま表示されます。 どうすればよいでしょうか? import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; //4openURL import java.awt.Desktop; import java.net.URI; import javax.swing.text.*; import javax.swing.text.html.HTMLDocument; class tstFrame extends JFrame { private final String strHead = "<HTML>" + "<HEAD>" + "<META http-equiv=\"Content-Type\" content=\"text/html\">" + "</HEAD>"; private String strBgColor = "#CCCCCC"; // private String strHTML = "<html><body bgcolor=\"#CCCCFF\">google<br><br><a href=\"http://www.google.co.jp/\">click here!!</a>"; // //ログ表示部 javax.swing.JEditorPane jEdtLogHtml; JButton jbtnA = new JButton ("追加"); JButton jbtnC = new JButton ("変更"); public tstFrame(){ getContentPane().setLayout(new FlowLayout()); //実際にログを表示する窓 jEdtLogHtml = new javax.swing.JEditorPane("text/html" , strHTML); this.getContentPane().add(new JScrollPane(jEdtLogHtml)); jbtnA.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ java.util.Date d = new java.util.Date(); addText("<font color=\"#FFFFFF\">"+d.toString()+"</font>" ); } }); jbtnC.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ initALL(); } }); this.getContentPane().add(jbtnA); this.getContentPane().add(jbtnC); this.setSize(400 , 400); this.setVisible(true); // jEdtLogHtml.setEditable(false); } // 画面を初期化する public void initALL(){ //??? jEdtLogHtml = new javax.swing.JEditorPane("text/html" , strHTML); } // 文字列をログに追加する public void addText(String argStrlog){ jEdtLogHtml.setContentType("text/html"); HTMLDocument doc = (HTMLDocument)jEdtLogHtml.getDocument(); SimpleAttributeSet sas = new SimpleAttributeSet(); try{ doc.insertString(doc.getLength(), argStrlog+"\n", sas); }catch(BadLocationException e) { e.printStackTrace(); } jEdtLogHtml.setContentType("text/html"); this.setVisible(true); } public static void main(String[] args) { new tstFrame().setVisible(true); } }

  • jdkとjreの互換性について

    PCのWebブラウザからJAVAアプレットを使用しています。 jdk1.4でコンパイルしていたソースをjdk1.5でコンパイルしてjre1.4で使用したところ、 ランタイムエラーが表示されてしまいました。 jdk1.5でコンパイルした実行ファイルをjre1.4とjre1.5の両方で使用することは可能なのでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • RTFテキストの保存

    Javaでリッチテキスト対応のエディタを作っているのですが、うまく保存ができません。 ご存知の方がいらっしゃればご教授頂けませんでしょうか? 【つまづいているところ】 RTFEditorKitを使って、Documentを保存すると、 文字配置(中央寄せなど)が保存されたファイルに反映されない。 (太字や、フォントサイズなどはちゃんと保存される) 【ソース(部分抜粋)】 //=====定義部分===== StyleContext sc = new StyleContext(); DefaultStyledDocument doc = new DefaultStyledDocument(sc); JTextPane textPane = new JTextPane(doc); //=====フォント修飾(太字)===== SimpleAttributeSet attr = new SimpleAttributeSet(); StyleConstants.setBold(attr, true); textPane.setCharacterAttributes(attr, false); //=====中央寄せ===== SimpleAttributeSet attr = new SimpleAttributeSet(); StyleConstants.setAlignment(attr, StyleConstants.ALIGN_CENTER); textPane.setParagraphAttributes(attr, false); //=====保存===== FileOutputStream out = new FileOutputStream("出力パス"); new RTFEditorKit().write(out, doc, 0, doc.getLength()); out.close(); 【環境】 OS:win2000 JDK:jdk1.5.0_04 【参考にしたサイト】 JavaDrive http://www.javadrive.jp/tutorial/appli/word/index.html 【備考】 ワードパッドと、RTFEditorKitで作成されたRTFファイルを見ると、 ワードパッド:\pard\qc a\par("a"を中央寄せで表示) RTFEditorKit:a\par となっていたので、前半の「\pard\qc」がうまく書き出されていないのが原因。 ただ、ワードパッドで文字配置を編集したテキストは問題なく読み込める。 APIドキュメントを見ると、RTFEditorKitは未だ不完全という感じなので、 documentを解析し、RTFに書き出す部分を自作するしかないでしょうか?

    • ベストアンサー
    • Java
  • Webサイトのアプレットを実行したい

     今晩は、Java初心者です、宜しくお願いします。  Win 7です。  アプレットが表示されるWebサイトに行くと、アプレットが表示されず「JAVA PLUGーINがJRE衝突 を検出しました。」と表示され、アプレットが実行できません。  どのようにしたら、アプレットの画面が表示され、アプレットを実行できるようになるのでしょうか。  Programフォルダを見ると、「JRE6、JRE7、JRE1.5.0_06、jdk1.7.0_21」がインスト-ルされて いました。  宜しくお願いします。

    • ベストアンサー
    • Java
  • eclipse自身が参照するJREについて

    いつもお世話になります。 eclipse自身が参照するJRE(eclipse自身の起動、実行のために必要なJRE)について、 以下の内容を教えて頂けませんでしょうか。 (1)eclipseがデフォルトで設定するJREの場所  まず私の認識としては、デフォルトは、パスの通っている場所からJREを見つけ、それを使用して  起動、実行し、インストール済みJREに設定される、だと思っています。  (自分が調べた限りではそうでした)    ここで、パスとはどこの設定のことなのでしょうか?  JavaはJDKの1.6をインストールしています。(C:\Java配下にJDKとJREをインストール)  試してみたのですが、環境変数のPATHにはJRE、JDKの場所を指し示す設定はしていません。  しかし、eclipseは起動しており、インストール済みJREを見たところ、「C:\Java\jre6」と  なっており、JDK1.6インストール時のパブリックJREを参照していました。  この設定は、どこを見ているのでしょうか? (2)eclipseのバージョンと対応しているJREのバージョン  現時点でeclipseは3.7まで出ていますが、それぞれのeclipseのバージョンを起動するのに必要な  JREのバージョンは何になるのでしょうか?調べてみましたが見つけることができませんでした。 宜しくお願い致します。 OS:Windows 7 HomePremium eclipse:eclipse-jee-indigo-SR1-win32-x86_64.zip

    • ベストアンサー
    • Java
  • Eclipseに「JDK」を設定する理由が不明です

    Eclipseの設定「インストール済みのJRE」に「JDK」を設定する理由が分かりません。 WEBや書籍では、「JRE」から「JDK」に変更しなければならないと非常に多くの記載が見受けられるのですが、理由がよく分かりません。 「JRE8」を設定しているのですが、Tomcat8ならJSPをコンパイルできますし、何も困ることはないのでは? と思っています。 実際、開発で困ることは何があるのでしょうか? 現状、何も困っていません。 Eclipseには独自のJavaコンパイラが搭載されていますので、JavaのコンパイルにJDKは不要です。 昔はTomcatでJSPがコンパイルできないからということで注意書きが多かったですが、未だにそういうことを書いてあるWEBや書籍があります。今のTomcatならJREのままでも問題ないので、結局、何の為にJDKに設定し直しているのか分からないWEBや書籍ばかりです。 実は不要なのでは? という疑問が湧きます。

  • EclipseでJavaコンパイラのバージョンを上げるには?

    Eclipse2.1を使用しています。 設定画面の[Java]→[コンパイラー]→[コンパイラー準拠レベル]に5.0の選択肢がありません。 コンパイラのバージョンを上げるにはどうすればよいのでしょうか? ※jdk1.5.0_05を配置し、環境変数を通しています。 ※[Java]→[インストール済み JRE]にはjdk1.5.0_05を追加しチェックを付けています。

    • ベストアンサー
    • Java
  • eclipse3.1を起動しても、Swingがない?

    超初心者的質問で恐れ入ります。 eclipse3.1を起動しても、Swingがありません。 どうすればSwingを使えるようになるのでしょう? どうかご教授ください。 本を買ってきて、概ねその記述通りにインストールをしました。 OSはWindows XPです。 【インストール実施手順】 1.eclipse3.1のインストール  eclipse-SDK-3.1-win32.zipを使用 2.eclipse3.1の日本語化  31I18Nwith30NLS.zip  NLpack-eclipse-SDK-3.0.x-win32.zip、  を使用 3.Visual Editorのプラグインをインストール  VE-runtime-1.1.0.1.zip  emf-sdo-runtime-2.1.0.zip  GEF-runtime-3.1.zipを使用 4.eclipse3.1上の環境設定  ・「設定」-「JAVA」-「コンパイラー」の準拠レベルは5.0にしています。  ・「設定」-「JAVA」-「インストール済みのJRE」はJDK1.5.0_04にしています。 この状態で、「設定」の中にSwingの設定が無いですし、新規作成でもSwingが見当たりません。

  • 一つにまとめたい

    最近JAVAプログラミングをやりはじめました。 netbeansで作成しています。 文章を入力し、ドラッグしてもらい格納ボタンを押すと下に表示されます。 ドラッグした文字でいいならOKボタンを押します。 押すと配列に格納されます。 表示を押すと配列の中身が見えます(これは少し適当な作りですが) 今の段階ではこれでうまくいきます。ですがどの配列に入れるか選択したい場合に困っています。 「配列2に格納」というボタンを作った場合、配列2に格納するようにするにはどうすればよいでしょうか? 今の段階では「配列に格納」というボタンは実際はドラッグした文字しか表示していませんが、本来は複数のボタンを配置してボタンにより動作を変えたいのです。ただ同じものを使いたいのです。わざわざ別のボタンやテキストエリアを作るのは無駄ですし。 ただ色々試してもエラーが出てしまい実行できずにいます。 ソースを載せておきます。お願いします。 package javaapplication5; public class sample11 extends javax.swing.JFrame { int i=0; String word1; String[] test = new String[10]; /** Creates new form sample11 */ public sample11() { initComponents(); } @SuppressWarnings("unchecked") private void initComponents() { word = new javax.swing.JTextField(); jButton1 = new javax.swing.JButton(); SelectWord = new javax.swing.JTextField(); Ok = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); Show = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); ShowResult = new javax.swing.JTextArea(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); word.setText("文章を入力"); jButton1.setText("配列に格納"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); Ok.setText("OK"); Ok.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { OkActionPerformed(evt); } }); jLabel1.setText("で構いませんか?"); Show.setText("表示"); Show.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { ShowActionPerformed(evt); } }); ShowResult.setColumns(20); ShowResult.setRows(5); jScrollPane1.setViewportView(ShowResult); (文字数の都合でここにあったレイアウトに関する記述は削除しました) private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed word1 = word.getSelectedText(); SelectWord.setText(word1); } private void OkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_OkActionPerformed test[i] = SelectWord.getText(); ++i; }//GEN-LAST:event_OkActionPerformed private void ShowActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ShowActionPerformed for(int j=0;j<i;j++){ ShowResult.setText(ShowResult.getText()+test[j]+"\n"); } } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new sample11().setVisible(true); } }); } private javax.swing.JButton Ok; private javax.swing.JTextField SelectWord; private javax.swing.JButton Show; private javax.swing.JTextArea ShowResult; private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextField word; // End of variables declaration }

    • ベストアンサー
    • Java

専門家に質問してみよう