GUIアプリ④色々なコンポーネント

・HelloWorld
・レイアウト
・色々なダイアログ
・色々なコンポーネント(今回)
・描画

GUIアプリの連載の続きです。
今回は、コンポーネントについてです。
色々な種類のコンポーネントがあるので、学んでいきたいと思います。

コンポーネントの種類を以下に示します。

#コンポーネント備考
1メニュー(JMenuクラス)・JMenuBarクラス
・JMenuItemクラス
2チェックボックス(JCheckBoxクラス)
3ラジオボタン(JRadioButtonクラス)・ButtonGroupクラスでラジオボタンをグループ化できます。
4コンボボックス(JComboBoxクラス)
5テキストフィールド(JTextFieldクラス)
6スクロールバー(JScrollBarクラス)AdjustmentListnerインターフェイスのオーバラードメソッドのアジャストメントバリューチェンジドメソッドでイベント処理します。
7ラベル(JLabelクラス)
8ボタン(JButtonクラス)

■Javaソース資源

#ファイル名概要修正/新規
1GuiVariousComponent.javaフレームクラス新規

■作成手順

作成手順備考
1プロジェクトの作成プロジェクト名:GuiVariousComponent
2Javaソース作成・クラス
・メイン
・コンストラクタ
・アクションパフォームド
・アジャストメントバリューチェンジド

#1 プロジェクトの作成

#2 Javaソース作成

クラス名:GuiVariousComponent
スーパークラス(継承元クラス):JFrame
インターフェイス(継承元インターフェイス):ActionListener,AdjustmentListner
継承された抽象メソッドはチェックした方がよいです。
これをチェックしないと、結局エラーとなって後で追加することになります。

行数説明
23~24クラス名:GuiVariousComponet
継承元クラス:JFrame
インターフェイス:ActionListener, AdjustmentListener
27~30メニュー関連(JMenuBar、JMenu、JMenuItem)のクラスのインスタンス生成になります。
32チェックボックス(JCheckBox)クラスのインスタンス生成になります。
34~36ラジオボタン1~3(JRadioButton)クラスのインスタンス生成になります。
①引数:ラジオ1~3:ラジオボタン表示
②引数:true:初期選択
38コンボボックス(JComboBox)クラスのインスタンス生成になります。
40テキストフィールド(JTextField)クラスのインスタンス生成になります。
42~43スクロールバー1~2((JScrollBar)クラスのインスタンス生成になります。
①引数:JScrollBar.HORIZONTAL:横スクロール
   :JScrollBar.VERICAL:縦スクロール
②引数:0:初期値
③引数:10:摘みの幅
④引数:0:最小値
⑤引数:110:最大値
(※実際は、摘みの幅分(10)引かれる→最大値は100となる)
45~46ラベル1~2(JLabel)クラスのインスタンス生成になります。
48ボタン(JButton)クラスのインスタンス生成になります。

行数説明
50~51AdjustmentListenerインターフェイスの抽象クラスのオーバーライドになります。
メソッド名:adustmentValueChanted
引数:AdustmentEvent e :アジャストメントイベント
53アジャストメントイベントがスクロールバー1のイベントか判別
54ラベル1にスクロールバー1の値を設定しています。
56アジャストメントイベントがスクロールバー2のイベントか判別
57ラベル2にスクロールバー2の値を設定しています。

行数説明
61~62ActionListenerインターフェイスの抽象クラスのオーバーライドになります。
メソッド名:actionPerformed
引数:ActionEvent e :アクションイベント
64Stringクラス型 strの宣言
66アクションイベントがメニュー(開く)かどうか判別
67~68メッセージダイアログの表示
①引数:this:親ウインドウ
②引数:"開く":メッセージ
③引数:”information”:タイトルバー
④引数:JOptionPane.INFORMATION_MESSAGE:メッセージタイプ
71アクションイベントがメニュー(閉じる)かどうか判別
72アプリを終了する。

行数説明
75アクションイベントがボタンかどうか判別
77~81チェックボックスの状態を取得して、改行を末尾に設定しています。
82~88ラジオボタンの状態を取得して、改行を末尾に設定しています。
89コンボボックスの状態を取得して、改行を末尾に設定しています。
90テキストフィールドの状態を取得して、改行を末尾に設定しています。
91~92スクロールバー1~2の状態を取得して、改行を末尾に設定しています。
94~95メッセージダイアログの表示
①引数:this:親ウインドウ
②引数:str:メッセージ(色々なコンポーネントの状態)
③引数:”information”:タイトルバー
④引数:JOptionPane.INFORMATION_MESSAGE:メッセージタイプ
行数説明
98アクションイベントがチェックボックスかどうか判別
77~81チェックボックスの状態を取得しています。
99~103チェックボックスの状態を取得しています。
104~105メッセージダイアログの表示
①引数:this:親ウインドウ
②引数:str:メッセージ(チェックボックスの状態)
③引数:”information”:タイトルバー
④引数:JOptionPane.INFORMATION_MESSAGE:メッセージタイプ

行数説明
108アクションイベントがコンボボックスかどうか判別
109コンボボックスの状態を取得しています。
110~111メッセージダイアログの表示
①引数:this:親ウインドウ
②引数:str:メッセージ(コンボボックスの状態)
③引数:”information”:タイトルバー
④引数:JOptionPane.INFORMATION_MESSAGE:メッセージタイプ

行数説明
115~118メインメソッド
コンストラクタの呼び出しのみ行っています。

行数説明
120コンストラクタメソッド
122~127メニュー関連の設定
メニュー(JMenu)クラスに、メニュー項目(開く)、(閉じる)(JMenuItem)クラスを設定しています。
メニューバー(JMenuBar)クラスに、メニュー(JMenu)クラスを設定しています。
メニュー項目(開く)、(閉じる)(JMenuItem)クラスをアクションリスナーに登録しています。

行数説明
130グリッドレイアウト(6行、2列)に設定しています。
132~133フレーム自身のコンテンツ・ペインにチェックボックス(JCheckBox)クラスを配置しています。
チェックボックス(JCheckBox)クラスをアクションリスナーに登録しています。
136~142ボタングループ(ButtonGroup)クラスのインスタンスを生成しています。
ラジオボタン1~3(JRadioButton)クラスをボタングループ(ButtonGroup)クラスに設定しています。
フレーム自身のコンテンツ・ペインにラジオボタン1~3を配置しています。
145~149コンボボックスの選択肢を「日本」、「アメリカ」、「イギリス」に設定しています。
フレーム自身のコンテンツ・ペインにコンボボックス(JComboBox)クラスを配置しています。
コンボボックス(JComboBox)クラスをアクションリスナーに登録しています。

行数説明
152フレーム自身のコンテンツ・ペインにテキストフィールド(JTextField)クラスを配置しています。
154~157フレーム自身のコンテンツ・ペインにスクロールバー1~22(JScrollBar)クラスを配置しています。
スクロールバー1~2(JScrollBar)クラスをアジャストメントリスナーに登録しています。
158~159フレーム自身のコンテンツ・ペインにラベル1~2(JLabel)クラスを配置しています。
162~163フレーム自身のコンテンツ・ペインにボタン(JButton)クラスを配置しています。
ボタン(JButton)クラスをアクションリスナーに登録しています。
166~169フレーム自身のコンテンツ・ペインを以下に設定しています。
・タイトル:「色々なコンポーネント」
・サイズ:幅300ピクセル、高さ300ピクセル
・表示:可

ここまでくれば、準備は整いました。実行してみましょう。

メニューを開くをクリックしてみましょう。

「開く」メッセージボックスを表示します。

チェックボックスをクリックして、メッセージボックスが表示します。

コンボボックスを「アメリカ」を選択します。

テキストフィールドに、「コンポーネントを学ぼう!」を入力しました。

スクロールバー1は30を設定、スクロールバー2は100を設定しました。
ボタンを押下してみます。

設定どおりに、メッセージボックスが表示すれば、成功です!お疲れ様でした!

☆まとめ☆ 今回は、色々なコンポーネントについて学びました。
スクロールバーだけは、少し特殊でAdjustmentListenerインターフェイスの
抽象メソッドのオーバーライドでイベント処理するので注意が必要です。
メッセージボックス内での改行は「\n」です。これは覚えておくと良いですね。
GUIの連載も4回目でだいぶ、慣れてきましたでしょうか。
次回もよろしくお願いします。

ソースコードをコピーペースト用に記載します。

GuiVariousComponent.java

package app;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.JScrollBar;
import javax.swing.JTextField;

public class GuiVariousComponent extends JFrame
    implements ActionListener, AdjustmentListener {

  //メニューのインスタンス
  JMenuBar jmenuBar = new JMenuBar();
  JMenu jmenu = new JMenu("ファイル");
  JMenuItem jmenuOpen = new JMenuItem("開く");
  JMenuItem jmenuClose = new JMenuItem("閉じる");
  //チェックボックス
  JCheckBox jCheckBox = new JCheckBox("チェックボックス");
  //ラジオボタン
  JRadioButton jRadiobtn1 = new JRadioButton("ラジオ1",true);
  JRadioButton jRadiobtn2 = new JRadioButton("ラジオ2");
  JRadioButton jRadiobtn3 = new JRadioButton("ラジオ3");
  //コンポボックス
  JComboBox jComboBox = new JComboBox();
  //テキストフィールド
  JTextField jTextField = new JTextField();
  //スクロールバー
  JScrollBar jScrollBar1 = new JScrollBar(JScrollBar.HORIZONTAL,0,10,0,110);
  JScrollBar jScrollBar2 = new JScrollBar(JScrollBar.VERTICAL,0,10,0,110);
  //ラベル
  JLabel jLabel1 = new JLabel("0",JLabel.CENTER);
  JLabel jLabel2 = new JLabel("0",JLabel.CENTER);
  //ボタン
  JButton jButton = new JButton("ボタン");
  
  @Override
  public void adjustmentValueChanged(AdjustmentEvent e) {
    // TODO 自動生成されたメソッド・スタブ
    if(e.getSource()==jScrollBar1) {
      jLabel1.setText(String.valueOf(jScrollBar1.getValue()));
    }
    if(e.getSource()==jScrollBar2) {
      jLabel2.setText(String.valueOf(jScrollBar2.getValue()));
    }
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    // TODO 自動生成されたメソッド・スタブ
    String str;
    //メニュー開くをクリック時
    if(e.getSource() == jmenuOpen) {
      JOptionPane.showMessageDialog(this, "開く","information",
          JOptionPane.INFORMATION_MESSAGE);
    }
    //メニュー閉じるをクリック時
    else if(e.getSource() == jmenuClose) {
      System.exit(0);
    }
    //ボタン押下時
    else if(e.getSource() == jButton) {
      
      if(jCheckBox.isSelected()) {
        str="チェックボックス:ON\n";
      }else {
        str="チェックボックス:OFF\n";
      }
      if(jRadiobtn1.isSelected()) {
        str=str+"ラジオボタン:ラジオ1選択\n";
      }else if(jRadiobtn2.isSelected()){
        str=str+"ラジオボタン:ラジオ2選択\n";
      }else if(jRadiobtn3.isSelected()) {
        str=str+"ラジオボタン:ラジオ3選択\n";
      }
      str=str+"コンボボックス:"+jComboBox.getSelectedItem()+"を選択\n";
      str=str+"テキストフィールド:"+jTextField.getText()+"\n";
      str=str+"スクロールバー1:"+jScrollBar1.getValue()+"\n";
      str=str+"スクロールバー2:"+jScrollBar2.getValue();
      
      JOptionPane.showMessageDialog(this, str,"information",
        JOptionPane.INFORMATION_MESSAGE);
    }
    //チェックボックスクリック時
    else if(e.getSource() == jCheckBox) {
      if(jCheckBox.isSelected()) {
        str="チェックボックス:ON ";
      }else {
        str="チェックボックス:OFF ";
      }
      JOptionPane.showMessageDialog(this, str,"information",
          JOptionPane.INFORMATION_MESSAGE);
    }
    //コンボボックス変更時
    else if(e.getSource() == jComboBox) {
      str="コンボボックス:"+jComboBox.getSelectedItem()+"を選択 ";
      JOptionPane.showMessageDialog(this, str,"information",
          JOptionPane.INFORMATION_MESSAGE);
    }
  }

  public static void main(String[] args) {
    // TODO 自動生成されたメソッド・スタブ
    new GuiVariousComponent();
  }

  public GuiVariousComponent() {
    //メニューの設定
    jmenu.add(jmenuOpen);
    jmenu.add(jmenuClose);
    jmenuBar.add(jmenu);
    setJMenuBar(jmenuBar);
    jmenuOpen.addActionListener(this);
    jmenuClose.addActionListener(this);
    
    //グリッドレイアウト(6行、2列)に設定
    getContentPane().setLayout(new GridLayout(6,2));
    //チェックボックス設定
    getContentPane().add(jCheckBox);
    jCheckBox.addActionListener(this);
    
    //ラジオボタン設定
    ButtonGroup btnGrp = new ButtonGroup();
    btnGrp.add(jRadiobtn1);
    btnGrp.add(jRadiobtn2);
    btnGrp.add(jRadiobtn3);
    getContentPane().add(jRadiobtn1);
    getContentPane().add(jRadiobtn2);
    getContentPane().add(jRadiobtn3);
    
    //コンポボックス設定
    jComboBox.addItem("日本");
    jComboBox.addItem("アメリカ");
    jComboBox.addItem("イギリス");
    getContentPane().add(jComboBox);
    jComboBox.addActionListener(this);
    
    //テキストフィールド設定
    getContentPane().add(jTextField);
    //スクロールバー
    getContentPane().add(jScrollBar1);
    getContentPane().add(jScrollBar2);
    jScrollBar1.addAdjustmentListener(this);
    jScrollBar2.addAdjustmentListener(this);
    //ラベル
    getContentPane().add(jLabel1);
    getContentPane().add(jLabel2);
    //ボタン
    getContentPane().add(jButton);
    jButton.addActionListener(this);
    
    //フレーム自身設定
    setTitle("色々なコンポーネント");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(300,300);
    setVisible(true);
  }

}

Follow me!