トップページ > dsPIC入門 > Javaでハイパーターミナル(2)
Swingクラス・ライブラリのコンポーネントの1つとして、“JTextArea”というのがあります。 これは文字列を複数行表示するためのコンポーネントで、文字を表示したり、表示されている文字を取得 したりすることができます。これの使い方を見ていきます。最終的に実装する形とは違いますが、 とりあえずテストということで、MainFrameクラスのコンストラクタで実装してみることにします。
//****************************************************************************** //Javaでハイパーターミナル(1) テキストエリア表示まで //****************************************************************************** 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"); //コンテント・ペインを作成。コンテント・ペインはJPanel型です。 JPanel cp = new JPanel(); //レイアウト方式を設定。今回は座標で設定するため、nullとします。 cp.setLayout(null); //コンテント・ペインをフレームに追加。 add(cp); //テキストエリアを作成 JTextArea tx = new JTextArea(); //テキストエリアの大きさ、場所を設定。 tx.setBounds(50,50,400,300); //テキストエリアをコンテント・ペインに追加。 cp.add(tx); } }
コンテント・ペイン…というのがありました。これは名前の通り、フレームの上に貼り付けて使用する“枠”です。 フレームの上に直接ボタンやテキストエリア等のコンポーネントを貼り付けていっても良いのですが、 あらかじめコンテント・ペインの上に各コンポーネントを貼り付けておいて、それを最後にフレームに貼り付ける …という考え方をすると、コンテント・ペインとフレームを独立した要素として考えることができるので クラス管理などの面でラクだったりします。 (実際にソースコードを書く際には、記述の順番はこの通りでなくても大丈夫です。) このコンテントペインはただの“枠”なので、型(というのか?)は JPanelとなります。上のソースコードだと、そのありがたみがイマイチなのですが、後々のことを考えてコンテント ペインを使用することにします。
Javaにはレイアウト機能…というのもありました。フレームやパネルにコンポーネントを貼り付ける際に その都度座標を設定していったのでは面倒なので、自動でレイアウトをしてくれるというやつです。 レイアウトの種類にはいろいろあり、柔軟なレイアウトが可能になっています。…が、今回は使いません。 とりあえず基礎の基礎ということで、今回はレイアウト機能をOFFにして、コンポーネントごとに座標を設定 していくという方法を使ってみます。いざという時の奥の手(?)として使えるようにしておくということで。
ここまでの内容は、ソースコード上では3行分となります。
//コンテント・ペインを作成。コンテント・ペインはJPanel型です。 JPanel cp = new JPanel(); //レイアウト方式を設定。今回は座標で設定するため、nullとします。 cp.setLayout(null); //コンテント・ペインをフレームに追加。 add(cp);
JPanelのインスタンスとして生成したコンテントペインは、ContentPaneを意識して“cp”という名前にしてみました…。
テキストエリアは、“JTextArea”クラスとして扱います。コンストラクタの引数には何も入れていません。
//テキストエリアを作成 JTextArea tx = new JTextArea(); //テキストエリアの大きさ、場所を設定。 tx.setBounds(50,50,400,300); //テキストエリアをコンテント・ペインに追加。 cp.add(tx);
…でテキストエリアの位置と大きさを設定しています。最後にコンテントペインにテキストエリアを貼り付けて 終わり。
先ほど作ったプログラムをコンパイルして実行してみます。テキストエリアにカーソルが表示されているので、 適当に文字を打ち込んでみると…まず、右端までいった後に折り返すことなく右へ右へと行ってしまって 見えなくなってしまいます。これでは困ります。さらに、Enterキーで改行していくと、カーソルは下へ下へと 行ってしまって見えなくなってしまいます。これでは困ります……。
…ということで、修正版を作ります。