トップページ > dsPIC入門 > Javaでハイパーターミナル(3)

テキストエリアを使いやすくする

テキストエリアを追加(修正版)

前回は適当にテキストエリアを作成して、コンテント・ペインに貼り付けていました。 あれだといろいろ不都合があったので、少し手を加えることにします。
ファイル名は“serial_canvas1.java”です。

//******************************************************************************
//Javaでハイパーターミナル(1.5)  テキストエリア表示(改)
//******************************************************************************

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import gnu.io.*;
import java.io.*;


//******************************************************************************
//メインクラス。メイン関数内では、ただMainFrameを作成するだけです。
public class serial_canvas1
{
 //=============================================================================
 //メイン関数
 public static void main(String args[])
 {
  MainFrame frame = new MainFrame();
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setSize(500,500);
  frame.setVisible(true);
 }
}


//******************************************************************************
//実際のコンポーネントとかは、このクラスで管理します。JFrameを継承・・・
class MainFrame extends JFrame
{
 //=============================================================================
 //コンストラクタ
 MainFrame()
 {
  //JFrameクラスのコンストラクタを呼びます
  super("serial_canvas1.5");

  //コンテント・ペインを作成。コンテント・ペインはJPanel型です。
  JPanel cp = new JPanel();
  
  //レイアウト方式を設定。今回は座標で設定するため、nullとします。
  cp.setLayout(null);

  //コンテント・ペインをフレームに追加。
  add(cp);
  
  //テキストエリアを作成
  JTextArea tx = new JTextArea();

  //-----------------------------------------------------------------------------
  //これ以降、テキストエリアのための改良部分です。
 

  //まず、テキストエリアの文字列折り返しを有効にする。
  tx.setLineWrap(true);


  //スクロール・ペインを作成。
  JScrollPane sp = new JScrollPane(tx);
 
  //スクロール・バーは、垂直方向だけを使用します。
  sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

  //スクロール・ペインの大きさを設定
  sp.setBounds(50,50,400,300);

  //スクロール・ペインをコンテント・ペインに追加。
  cp.add(sp);
 }
}

改良点

setLineWrap()

  //まず、テキストエリアの文字列折り返しを有効にする。
  tx.setLineWrap(true);

前回のプログラムではテキストエリア内に文字を続けて入力していくと、右端に達した後も文字が 折り返さずに見えなくなってしまいました。よって、表示されているテキストエリアの右端まで カーソルが行った場合は自動で折り返すように“setLineWrap()”メソッドを使います。 引数はboolean型です。


スクロール・ペイン

  //スクロール・ペインを作成。
  JScrollPane sp = new JScrollPane(tx);

「スクロール・ペイン」は、その上に貼り付けたコンポーネントをスクロール表示させるために使う枠です。 文字列や画像などのラベルであれば、それがスクロールします。 テキストエリアであれば、テキストの編集領域がスクロールすることになります。これを使いましょう。

使い方は簡単で、スクロールペインを作成する際にコンストラクタの引数にコンポーネントを入れてやれば 、そのコンポーネントがスクロールするようになります。


スクロール・バーの設定

  //スクロール・バーは、垂直方向だけを使用します。
  sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

スクロールペインはタテ(垂直方向:Vertical)とヨコ(水平方向:Horizontal)の両方向にスクロール・バーを 用いることができます。また、どちらか一方だけを使用するように設定することもできます。 スクロールバーの設定は“set***ScrollBarPolicy()”メソッドを用います。“***”のところに“Vertical”か “Horizontal”のどちらかが入ります。引数にはスクロールペインクラスのフィールドである、 “JScrollPane.VERTICAL_SCROLLBAR_ALWAYS”などを入れます。

  スクロールあり スクロールなし
垂直方向 JScrollPane.VERTICAL_SCROLLBAR_ALWAYS JScrollPane.VERTICAL_SCROLLBAR_NEVER
水平方向 JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS JScrollPane.HORIZONTAL_SCROLLBAR_NEVER

今回は、垂直方向はALWAYS、水平方向はNEVERとしているので、垂直方向だけのスクロールバーが 表示されます。


スクロール・ペインごと管理します

  //スクロール・ペインの大きさを設定
  sp.setBounds(50,50,400,300);

  //スクロール・ペインをコンテント・ペインに追加。
  cp.add(sp);

スクロールペインは、その上にコンポーネントを貼り付けて使用するのでした。 貼り付けた後はスクロールペインが大枠として機能しますので、 スクロールペインを他のコンポーネント(フレームなど)に貼り付けることで 「スクロールバー付きのテキストエリア」が貼り付けられることになります。

テキストエリア単品の時もやっていましたが、コンポーネントをフレームやコンテント・ペインに 貼り付けるためには“setBounds()”メソッドで位置と大きさを 指定する必要があります。このメソッドは、テキストエリアクラスのメソッドを呼ぶのではなく、 大枠であるスクロールペインクラスのメソッドの方を呼ぶことになります。 あとは、前から用意してあったコンテントペインにaddして、登録完了となります。

コンパイルして、実行

今回も、メインクラスの名前が前回と同じなのでコンパイルは“javac serial_canvas1.java”です。 実行は“java serial_canvas1”です。

さて、テキストエリア内にいろいろ文字を打って試してみます。今回のものは普通に使われているワープロ・ソフト なんかと同じ感覚で編集できると思います。

次は、ボタンやコンボボックスなどのコンポーネントをコンテントペイン上に並べていって、 ウィンドウ内のレイアウトを作ってしまいます。




前へ   次へ