java 第34回  JTextFieldクラスとJTextAreaクラス | whichのブログ ~プログラミング体験記~

whichのブログ ~プログラミング体験記~

主にJava,vVsual C#,Andoroid,SQLについて
覚え基本た文法やプログラミング技法、各クラスの利用法を
忘れないように形にしたものです

初心者だとかプロだとか特に意識せず利用してもらえるとうれしいです。

今回はデータ入力としてもっともベタな部品でもあるテキストボックスです。
Javaでこの部品はどうやら2種類(使用方法がよくわからないのを合わせると3つ)あるみたいで、
大雑把に違いを言うと「入力できる行数」です
C#でこの部品は「TextBox」という部品が該当しておりプロパティの設定で複数行入力を設定できるためJavaみたいに複数のクラスに分けていない。

■JTextFieldクラス
1行のみ入力できる部品。
ボタン同様 使用頻度が高い部品であるが、この部品は初期設定が画面デザイン影響することもあるので独自メソッドを持っている

コンストラクタ

コンストラクタ引数説明
new JTextField()なし1行のみの文字列入力できる(0行分入力可能)部品を生成
new JTextField(int column)列数1行と引数で指定した列数分文字列入力できる部品を生成
new JTextField(String text,int column)文字列
列数
1行と引数で指定した列数分文字列入力できる部品を生成(初期入力値有り)

引数なしのコンストラクタだと入力できないタイプの部品になる。もちろんこのクラスにもsetSize(int col , int row)メソッドでサイズ設定をするのだが、
1つだけ特殊なのが設定された入力可能文字数によってサイズが異なるという特徴を持つ

メソッド

メソッド名返却値引数説明
setColumns(int columns)なし列数入力可能文字数を設定する
getColumns()intなし入力可能文字数を取得する

このクラスのコンストラクタで入力文字数の表示上限(入力こそできるがこれを超えた文字列はみえない)を設定するものが新しく増えたため それに対応したメソッドも当然存在する。
■JTextAreaクラス
複数行入力できる部品。
JTextFieldを複数行入力できるようにしたもの

コンストラクタ

コンストラクタ引数説明
new JTextArea()なし0行0列分文字列入力可能の部品を生成
new JTextArea(String text)文字列0行0列分文字列入力可能の部品を生成(初期入力値有)
new JTextArea(int row, int column)行数
列数
引数で指定された行数列数分の文字列入力可能の部品を生成
new JTextArea(String text, int row, int column)文字列
行数
列数
引数で指定された行数列数分の文字列入力可能の部品を生成(初期入力値有)

引数なしのコンストラクタだと入力できないタイプの部品になる。もちろんこのクラスにもsetSize(int col , int row)メソッドでサイズ設定をするのだが、
1つだけ特殊なのが設定された入力可能文字数によってサイズが異なるという特徴を持つ

メソッド

メソッド名返却値引数説明
setColumns(int columns)なし列数入力可能文字数を設定する
getColumns()intなし入力可能文字数を取得する
setRows(int rows)なし行数入力可能文字行数を設定する
getRows()intなし入力可能文字行数を取得する
setTabSize(int size)なしタブ幅タブ幅を引数に設定する
getTabSize()intなしタブ幅を取得する
setWrapStyleWord(boolean word)なしtrue 可能
false 不可
テキストの折り返し設定
getWrapStyleWord()booleanなしテキストの折り返し設定取得

JTextAreaの設定メソッドはメモ帳などのテキストエディタでイメージできるものばかりである。


■サンプル
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class GUICHAT extends JFrame implements ActionListener{
JTextField nowText;
JTextArea  fullText;
public static void main(String [] age){ new GUICHAT(); } //コンストラクタ内でJJFrameの設定全て完了ならOK
public GUICHAT(){
setTitle("JavaでGUIその3");
setSize(350,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JPanel client = new JPanel(new FlowLayout());
client.add(new JLabel("入力フォーム"));
JButton btn = new JButton("送信");
btn.addActionListener(this);
btn.setActionCommand("send");
nowText  = new JTextField(15);
fullText = new JTextArea("受信したメッセージがここに順次表示されます。",20,20);
client.add(nowText);
client.add(btn);
add(client,BorderLayout.SOUTH);
add(fullText,BorderLayout.CENTER);
setVisible(true);
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("send")){
String str = fullText.getText();
fullText.setText(str+"\n"+nowText.getText());
nowText.setText("");
}
}
}

実行結果


試しに「Hellow!!」入力して「送信」ボタンを押してみましょう

中央に入力した文字列が順次登録されていきます

これで「JLabel」「JButton」「JTextField」「JTextArea」が終わりました。
実をいうと今まで作ってきたサンプルはこの4つの部品だけでつくっています(CarldLayoutの回はちょっと違うが、)
つまり画面配置面だけ見るとこの4つはかなり基本的な部品に位置づけられ他の部品は「あれば処理の幅が広がって便利」程度の部品です。

ともあれ基本部品が終わったので次回はイベント処理についてでもやろうかな。