JavaでSwingを利用したGUIアプリケーションの作成3(テキストフィールドの配置)
Swingを利用してウィンドウの表示、ボタンやラベルの配置が出来たので、次にテキスト入力ができるGUIアプリケーションを作成する。
Swingで利用できるテキスト入力用コンポーネントには、以下のものが存在する。
- 1行分の入力ができる「JTextField」
- 複数行の入力ができる「JTextArea」
プロジェクトの作成
プロジェクト名「SwingSample03」を作成する。
1.[ファイル]⇒[新規]⇒[プロジェクト]を選択
2.[Javaプロジェクト]を選択し[次へ]をクリック
3.プロジェクト名等を入力し[完了]をクリック
- プロジェクト名に「SwingSample03」を入力
- プロジェクト・レイアウトで[プロジェクト・フォルダーを・・・]を選択
クラスの作成
GUIアプリケーションの起動および各コンポーネントの作成を行う「SwingAppMain」クラスを作成する。
1.[ファイル]⇒[新規]⇒[クラス]を選択
2.[新規Javaクラス]ダイアログで各項目を入力し[完了]をクリック
- パッケージに「swing.sample」を入力
- 名前に「SwingAppMain」を入力
- public static void main(String[] args)をチェック
3.作成したクラスに以下のクラスをインポート
- javax.swing.JButton
- javax.swing.JFrame
- javax.swing.JScrollPane
- javax.swing.JTextArea
- javax.swing.JTextField
- java.awt.BorderLayout
- java.awt.Container
4.mainメソッド内で「JFrame」クラスのインスタンス(mainFrame)を生成し初期設定を行いテキストフィールド、テキストエリアを配置
以下の項目の実装
- JFrameクラスのインスタンスを生成
- 閉じるボタン押下時のアプリケーションの振る舞いを決定
- ウィンドウの初期サイズ(幅、高さ)をピクセル単位で設定
- ウィンドウの表示場所を規定(画面の中央に表示)
- mainFrameのContentPaneを取得(contentPane)
- 「JTextField」クラスのインスタンス(textField)を生成
- 「JTextArea」クラスのインスタンス(textArea)を生成
- 「JScrollPane」クラスのインスタンス(scrollPane)を生成し、textAreaを追加
- 「JButton」クラスのインスタンス(button)を生成
- アクションの定義
- contentPaneにtextField、textArea、buttonを追加
- ウィンドウの表示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | package swing.sample; // 必要なクラスのインポート import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.AbstractAction; public class SwingAppMain { public static void main(String[] args) { // JFrameクラスのインスタンスを生成 JFrame mainFrame = new JFrame("サンプル"); // 閉じるボタン押下時のアプリケーションの振る舞いを決定 mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // ウィンドウの初期サイズ(幅、高さ)をピクセル単位で設定 mainFrame.setSize(320, 160); // ウィンドウの表示場所を規定 mainFrame.setLocationRelativeTo(null); // mainFrameのContentPaneを取得する Container contentPane = mainFrame.getContentPane(); // テキストフィールドのインスタンスを生成 final JTextField textField = new JTextField(); // テキストエリアのインスタンスを生成 final JTextArea textArea = new JTextArea(5,0); // スクロールペインにテキストエリアを追加 JScrollPane scrollPane = new JScrollPane(textArea); // ボタンのインスタンスを生成 JButton button = new JButton("追加"); // アクションの定義 button.addActionListener(new AbstractAction(){ private static final long serialVersionUID = 1L; public void actionPerformed(ActionEvent arg0) { // textFieldから文字列を取得し、取得した文字列に改行コードを加え、textAreaに追加 textArea.append(textField.getText() + "\n"); } }); // パネルをコンポーネントに配置 contentPane.add(textField, BorderLayout.NORTH); contentPane.add(scrollPane, BorderLayout.CENTER); contentPane.add(button, BorderLayout.SOUTH); // ウィンドウを表示する mainFrame.setVisible(true); } } |
5.[実行]→[Javaアプリケーション]を選択して、実行する
実行した結果、テキスト入力用コンポーネントが配置されたウィンドウが開く。
上段のテキストフィールドに値を入力し、「追加」ボタンをクリックするとテキストフィールドの値が下段のテキストエリアに追加される。
JScrollPane
JScrollPaneは、自身に追加されたコンポーネントに対して、スクロール処理を提供する。
サンプルでは、下段のテキストエリアに対して改行を数回入力すると、スクロールバーが現れる。
JScrollPaneの生成
1 | JScrollPane scrollPane = new JScrollPane(textArea); |
このコードでは、コンストラクタでJScrollPaneに追加するコンポーネントを指定している。
上記の場合は、textAreaが追加するコンポーネント。
textArea内の行数が増えたり、行内の文字数が増えたりしてスクロールする必要が生じると、スクロールバーが表示される。
テキストフィールドの値の取得と設定
テキスト入力用コンポーネントからの値の取得
1 | getText() |
getText()はJTextFieldとJTextAreaの親クラスであるJTextComponentクラスで提供されているメソッドで、テキスト入力用コンポーネント内のテキスト全体を取得する。
このほかにも、オフセットと読取長を指定したgetText(int, int)や、選択されている部分のみを取得するgetSelectedText()がある。
テキスト入力用コンポーネントへの値の設定
1 2 | setText(String) append(String) |
setText(String)はJTextFieldとJTextAreaの親クラスであるJTextComponentクラスで提供されているメソッドで、テキスト入力用コンポーネントにパラメータで指定した文字列が設定される。
Append(String)はJTextAreaクラスで提供されているメソッドで、パラメータをテキストの末尾に追加する。
アクションの定義
「クラスの作成」で作成したウィンドウでは、テキスト入力用コンポーネントから値を取得したり、値を設定したりすることはできない。
そこで、以下のようなコードが必要になる。
クラスのインポート
java.awt.event.ActionEvent
javax.swing.AbstractAction
1 2 3 4 5 6 7 8 | // アクションの定義 button.addActionListener(new AbstractAction(){ private static final long serialVersionUID = 1L; public void actionPerformed(ActionEvent arg0) { // textFieldから文字列を取得し、取得した文字列に改行コードを加え、textAreaに追加 textArea.append(textField.getText() + "\n"); } }); |
ここでは、次のようなことを行っている。
- textFieldから文字列を取得(textField.getText())
- 取得した文字列に改行コードを加え、textAreaに追加