• ベストアンサー

TextAreaでの文字の色

こんばんわ。 皆様、ゴールデンウィークいかがお過ごしでしょうか? さて、TextAreaもしくはJTextAreaで、一行づつ、文字の色を変えるにはどうしたらいいのでしょうか? 以前も、同じ内容の質問があったようですが、(http://oshiete1.goo.ne.jp/kotaeru.php3?q=22309) 読んでみたのですがStylepadというDEMOがどこにあるかわからず、解決できないのでよろしくお願いします。 解決できそうなサンプルのURLなど分かりましたら、回答していただければとてもたすかります。 import java.applet.*; import java.awt.*; import java.swing.*; public class test extends JApplet { public void init() { Container con = getContentPane(); String str1 = "あいうえお\n"; String str2 = "かきくけこ\n"; JTextArea JT = new JTextArea(); con.add(JT); JT.append(str1); JT.append(str2); } } これの"あいうえお"と"かきくけこ"を異なる色にしたいのですが、どうしたらいいのでしょう?

  • omni2
  • お礼率93% (46/49)
  • Java
  • 回答数2
  • ありがとう数11

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

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.2

 こんにちは。  JTextAreaはプレーンテキストを扱うコンポーネントなので、こういう場合はJEditorPaneかJTextPaneを使います。  JEditorPaneはHTMLを扱うときに使うようなので、JTextPaneを使うのが適当のような気がします。  サンプルを書くとこんな感じでしょうか。 import javax.swing.*; import javax.swing.text.*; import java.awt.*; public class Test extends JFrame {   JTextPane textPane;   DefaultStyledDocument document;      public static void main(String[] args) {     Test frame = new Test();     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.setSize(400, 300);     frame.setVisible(true);   }      public Test() {     document = new DefaultStyledDocument();     textPane = new JTextPane(document);              try {       //属性情報を作成       SimpleAttributeSet attribute = new SimpleAttributeSet();              //属性情報の文字色に赤を設定       attribute.addAttribute(StyleConstants.Foreground, Color.RED);       //ドキュメントにその属性情報つきの文字列を挿入       document.insertString(0, "あいうえお\n", attribute);              //属性情報の文字色に青を設定       attribute.addAttribute(StyleConstants.Foreground, Color.BLUE);       //ドキュメントにその属性情報つきの文字列を挿入       document.insertString(document.getLength(), "かきくけこ\n", attribute);     }     catch (BadLocationException ex) {       ex.printStackTrace();     }          add(textPane, BorderLayout.CENTER);   } }  なんか、いろいろややこしいのですが、参考URLのサイトがわかりやすかったので、ご覧ください。

参考URL:
http://www.javadrive.jp/tutorial/appli/word/index1.html
omni2
質問者

お礼

回答ありがとうございます。 こちらも早速試してみました。 見事に文字の色が行ごとに変えることができました。 ありがとうございます。 No1の方の例とどちらを使用しようかと考えたのですが、 HTMLの方が使いなれているんですが、insertStringが使いがってが良さそうなので、こちらを使用することにいたします。 とても参考になりました。おふたりとも良い例と良い参考URLを示してくださいましてありがとうございました。

その他の回答 (1)

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

URLを見て頂くとわかりますが、JTextAreaでは全て同じフォントで表示されると書いてあります。 スタイル付きテキストを利用するにはJEditPaneやJTextPaneを利用する必要があります。 String str1 = "<font color=\"blue\">あいうえお</font>"; String str2 = "<font color=\"red\">かきくけこ</font>"; JTextPane JT = new JTextPane(); JT.setContentType("text/html"); JT.setText(str1 + "<br>" + str2); con.add(JT);

参考URL:
http://java.sun.com/docs/books/tutorial/uiswing/components/text.html
omni2
質問者

お礼

回答ありがとうございます。 早速ためしてみると見事にできました。 ありがとうございます。 使い慣れたhtmlで文字の色やサイズまで簡単に変更できるのでとても扱いやすいです。

関連するQ&A

  • setLineWrapの使い方

    初めまして、皆さん。馬鹿な初心者の悩みを聞いてください。 卒論に向けて、現在、JAVAでアプレットプログラムを書いているのですが、 TextAreaを自動改行させようとコンパイルをかけると、 以下のようなエラーがでてしまうのです。 Java初心者なので、非常に困っています。 どうか教えてくださいよろしくお願いいたします。 なお、実行環境は WindowsXP Home Edition JDK1.3.1_010 です。 --------------------ソース-------------------- /* TextArea改行用テスト */ import java.awt.*; import java.awt.event.*; import java.applet.*; import javax.swing.*; public class JTextArea extends JApplet{  public void init() {   JTextArea text = new JTextArea();   text.setLineWrap(true);   getContentPane().add(new JScrollPane(text));  } } --------------------エラー-------------------- JTextArea.java:12: シンボルを解決できません。  シンボル: メソッド setLineWrap (boolean)  場所 : JTextArea の クラス       text.setLineWrap(true);         ^ エラー 1 個

    • ベストアンサー
    • Java
  • JavaAppletがIEで表示できない

    毎日すいません。 せっぱ詰まってて、非常に困ってます。 実は、昨日教えて頂いたものは、AppletViewerを介して、 しっかりとできあがったのですが、なぜか、インターネットエクスプローラからは見えないんです。 作ったファイル、 JText01.class JText01.html JText01.java は、全て同じフォルダにあります。 ご存じの方、どうかお力を貸して下さい。 お願いします。 ------------- HTML ソース ------------- <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS"> <title>JAVA Applet Test</title> </head> <body> <h2>JText01</h2> <applet code="JText01.class" width="300" height="100"> </applet> </body> </html> ------------- JAVA ソース ------------- /* TextArea改行用テスト */ import java.awt.*; import java.awt.event.*; import java.applet.*; import javax.swing.*; public class JText01 extends JApplet{ public void init() { JTextArea ta = new JTextArea( 5, 20); ta.setLineWrap(true); getContentPane().add(new JScrollPane(ta), BorderLayout.CENTER); }

    • ベストアンサー
    • Java
  • java通信について

    アプレットビューアは 通信成功できますが HTMLから実行すると失敗します so = new Socket( "localhost", 80 ); この部分が失敗してるようです なぜ起こるんでしょうか ? 解決方法を教えてください。 //html <html><body> <applet code = "a.class" width = "370" height ="530"></applet> </body></html>   //<applet code = "a.class" width="400" height = "200"></applet> import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; public class a extends java.applet.Applet implements ActionListener{ TextField tf; Button b; TextArea t; Panel p, p1; String str = "http://localhost/cgi-bin/a.cgi"; public void init(){ tf = new TextField( 32 ); b = new Button( "Post" ); t = new TextArea( 20, 48 ); b.addActionListener( this ); p = new Panel(); p.add( new Label( "String" ) ); p.add( tf ); p.add( b ); p1 = new Panel(); p1.add( t ); add( p ); add( p1 ); } public void actionPerformed( ActionEvent e ){ String str; if( e.getSource() == b ){ t.setText( sen( tf.getText() ) ); } } private String sen( String a ){   Socket so = null; InputStreamReader in = null; OutputStream os = null; String str1 = new String(); try { t.setText( "aa" ); so = new Socket( "localhost", 80 ); t.setText( "bb" ); in = new InputStreamReader( so.getInputStream() ); os = so.getOutputStream(); }catch( Exception e ){ return "Error!"; } String H = "POST " + str + " HTTP/1.0\n"; H += "Content-Length:" + String.valueOf( a.length() ) + "\n\n"; String st = new String( H + a ); try{ os.write( st.getBytes() ); }catch( Exception e ){ return "Error!"; } str1 = "Send:\n" + st; boolean bo = true; StringBuffer sb = new StringBuffer(); int s; while( bo ){ try{ s = in.read();   if( s == -1 ) bo = false; else sb.append( (char)s ); }catch( Exception e ){ bo = false; } } str1 += "\nResv:\n" + sb.toString(); return str1; } }

    • ベストアンサー
    • Java
  • JTableでスクロールバーが表示されない

    JTableで表を作成しました。 表示はされているのですが、 スクロールバーが表示されません。 コードは下記の通りです。 どうか宜しくお願いいたします。 ■Java import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; public class ren32 extends JApplet{ Container c; public void init(){ c = this.getContentPane(); c.setLayout(null); String[] cname = { "name","comment","test1","test2", "(0)","(1)","(2)","(3)","(4)", }; Object[][] cell = { {"","","","","","","","",""}, }; JTable table = new JTable(cell, cname); JScrollPane sp = new JScrollPane(table); sp.setBounds(10,10,750,380); c.add(sp); } } ■html <html> <head> <title>Ren1</title> <body bgcolor=white text=black> <applet code="ren32.class" width="800" height="500"> </applet> </head> </html>

    • ベストアンサー
    • Java
  • Vista/7でScrollbarの表示が異常

    Scrollbarを表示するAppletサンプルコードを書きました。 import java.applet.Applet; import java.awt.Scrollbar; import java.awt.event.AdjustmentEvent; import java.awt.event.AdjustmentListener; import java.awt.*; /* <applet code="kktest482" width=400 height=200> </applet> */ public class kktest482 extends Applet implements AdjustmentListener { static final long serialVersionUID = 0; TextArea ta; public void init() { Scrollbar sb = new Scrollbar(Scrollbar.VERTICAL, 50, 100, 0, 255); sb.addAdjustmentListener(this); add(sb); ta = new TextArea(10, 20); add(ta); } @Override public void adjustmentValueChanged(AdjustmentEvent arg0) { // TODO 自動生成されたメソッド・スタブ Scrollbar sb = (Scrollbar)arg0.getAdjustable(); ta.append("AdjustmentEvent: " + sb.getValue() + "\n"); ta.append("可視量: " + sb.getVisibleAmount() + "\n"); } } jdk1.6.0_24を使用中です。 Windows XPでは、Scrollbarのつまみの部分(可視量)が表示されますが、 Vista/7では、表示されません。 appletviewerでもブラウザのApplet表示でも同じ現象となります。 getVisibleAmount()の戻り値も100で、問題ありません。 対応策をご存知の方、よろしくお願いします。

    • ベストアンサー
    • Java
  • ボタンが表示されません

    //テキストパッドをつくっています。 //このプログラムはボタンが表示されませんなぜ? import java.awt.*; import javax.swing.*; class Test_Text extends JFrame{ public static void main(String args[]){ Sample_text st = new Sample_text(); JFrame jf = new JFrame("Test_Text"); JTextArea jt = new JTextArea(50,30); Container c = jf.getContentPane(); c.add(jt,BorderLayout.PAGE_START); jf.pack(); jf.setVisible(true); jf.setDefaultCloseOperation(EXIT_ON_CLOSE); } public void Sample_text(){ JButton j1,j2; j1 = new JButton("編集"); j2 = new JButton("保存"); setLayout(new FlowLayout()); this.add(j1); this.add(j2); } }

  • 簡単な暴走プログラム

    ボタンをクリックすると、classのディレクトリ文字を追加するという プログラにしようと思っています。 ボタンをクリックすると、テキストエリアへの書き込みが止まりません。 ソースではループしているように見えないから原因不明です。 どこが悪く、どう直せばいいんですか? import java.awt.*; public class aaaa0 extends java.applet.Applet { Button btn; TextArea ta; public void init() { add(ta = new TextArea(50, 50)); add(btn = new Button("Btn")); } public boolean action (Event e, Object o) { if (e.target == btn) { String str = ""; String buf = ""; str = getCodeBase().toString(); buf = ta.getText(); ta.setText(buf + "\r\n" + str); } return super.handleEvent(e); } }

    • ベストアンサー
    • Java
  • ファイルから正しい文字が読み取れない

    こんにちは いつもこちらでお世話になっています。 テキストファイルからすべての文字列を読み込んで フレーム上のtextAreaに読み込んだ文字列を書き込みたいのですが 文字化けしてしまって、正しく表示されません。 どなたか、正しく表示する方法を教えていただけないでしょうか。 よろしくおねがいします。 ちなみに、テキストボックスのパスとファイル名は(c:/test.txt)です。 ================================================= import java.awt.*; import javax.swing.*; import java.io.*; class labeltest { public static void main(String args[]) { JFrame frame=new JFrame("test"); JPanel panel=new JPanel(); JTextArea ta=new JTextArea(20,30); String buff; ta.setLineWrap(true); panel.add(ta); Container ct=frame.getContentPane(); ct.add(panel); try { FileReader fr=new FileReader("c:/test.txt"); BufferedReader br=new BufferedReader(fr); while((buff=br.readLine())!=null) { ta.append(buff); JOptionPane.showMessageDialog(null,buff,"", JOptionPane.PLAIN_MESSAGE); } br.close(); fr.close(); } catch(FileNotFoundException e) { JOptionPane.showMessageDialog(null, "見つからない","失敗",JOptionPane.PLAIN_MESSAGE); } catch(IOException e) { JOptionPane.showMessageDialog(null,"読めない","失敗" ,JOptionPane.PLAIN_MESSAGE); } frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } }

    • ベストアンサー
    • Java
  • Javaの問題について...

    import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.UnknownHostException; import javax.swing.JTextArea; public class html_getter { public static void main(String[] args){ Object o1 = null; try { o1 = new Getter5(new URL("http://www.google.com/")); } catch (MalformedURLException e) { e.printStackTrace(); } ((Getter5)o1).Show(); } } class Getter5{ private String charset = "Shift_JIS"; private JTextArea htmlArea; public Getter5(URL url){ htmlArea = new JTextArea(); try { URLConnection uc = url.openConnection(); BufferedInputStream bis = new BufferedInputStream(uc.getInputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(bis, charset)); htmlArea.setText("");//初期化 String line; while ((line = br.readLine()) != null) { htmlArea.append(line + "\n"); } } catch (MalformedURLException ex) { htmlArea.setText("URLが不正です。"); ex.printStackTrace(); } catch (UnknownHostException ex) { htmlArea.setText("サイトが見つかりません。"); } catch (IOException ex) { ex.printStackTrace(); } } public void Show(){ System.out.println(htmlArea.getText()); } } このプログラムはURLの指定先からHTMLを取ってきて表示するプログラムなのですが、 これに「indexOfとString s1を使ってURLの指定先のHTMLから自分の入力した文字列があるかどうかを判断するプログラム」を作りたいのですがどうすれば作れるでしょうか?

  • Javaアプレットについてですが

    Javaアプレットでボタンを押したら数字が増えるものを作っているのですがどうもうまく動きません。 ソースは下の通りです。 変更しなければいけないところがあるならお願いします。 import java.applet.Applet; import java.awt.Graphics; import java.awt.Button; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Sample7 extends Applet implements Runnable, ActionListener { Button bt; int num; public void init() { bt = new Button("開始"); add(bt); bt.addActionListener(this); Thread th; th = new Thread(this); th.start(); } public void actionPerformed(ActionEvent ae) { public void run() { try{ for(int i=0; i<11; i++){ num = i; repaint(); Thread.sleep(1000); } } catch(InterruptedException e){} } } public void paint(Graphics g) { String str = num + "です。"; g.drawString(str, 50, 50); } }

    • ベストアンサー
    • Java

専門家に質問してみよう