GUIアプリ④色々なコンポーネント
・HelloWorld
・レイアウト
・色々なダイアログ
・色々なコンポーネント(今回)
・描画
GUIアプリの連載の続きです。
今回は、コンポーネントについてです。
色々な種類のコンポーネントがあるので、学んでいきたいと思います。
コンポーネントの種類を以下に示します。
# | コンポーネント | 備考 |
1 | メニュー(JMenuクラス) | ・JMenuBarクラス ・JMenuItemクラス |
2 | チェックボックス(JCheckBoxクラス) | |
3 | ラジオボタン(JRadioButtonクラス) | ・ButtonGroupクラスでラジオボタンをグループ化できます。 |
4 | コンボボックス(JComboBoxクラス) | |
5 | テキストフィールド(JTextFieldクラス) | |
6 | スクロールバー(JScrollBarクラス) | AdjustmentListnerインターフェイスのオーバラードメソッドのアジャストメントバリューチェンジドメソッドでイベント処理します。 |
7 | ラベル(JLabelクラス) | |
8 | ボタン(JButtonクラス) |
■Javaソース資源
# | ファイル名 | 概要 | 修正/新規 |
1 | GuiVariousComponent.java | フレームクラス | 新規 |
■作成手順
# | 作成手順 | 備考 |
1 | プロジェクトの作成 | プロジェクト名:GuiVariousComponent |
2 | Javaソース作成 | ・クラス ・メイン ・コンストラクタ ・アクションパフォームド ・アジャストメントバリューチェンジド |
#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~51 | AdjustmentListenerインターフェイスの抽象クラスのオーバーライドになります。 メソッド名:adustmentValueChanted 引数:AdustmentEvent e :アジャストメントイベント |
53 | アジャストメントイベントがスクロールバー1のイベントか判別 |
54 | ラベル1にスクロールバー1の値を設定しています。 |
56 | アジャストメントイベントがスクロールバー2のイベントか判別 |
57 | ラベル2にスクロールバー2の値を設定しています。 |
行数 | 説明 |
61~62 | ActionListenerインターフェイスの抽象クラスのオーバーライドになります。 メソッド名:actionPerformed 引数:ActionEvent e :アクションイベント |
64 | Stringクラス型 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を設定しました。ボタンを押下してみます。
設定どおりに、メッセージボックスが表示すれば、成功です!お疲れ様でした!
ソースコードをコピーペースト用に記載します。
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);
}
}
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
//テキストフィールド
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);
}
}