2010年11月02日 Java儂(わし)的解釈によるメモ(Swing編) [長年日記]
_ Java儂(わし)的解釈によるメモ(Swing編)
JavaでのGUIプログラミングに挑んでみる編。
JLabel(ラベル(文字列)表示)
// // JLabelTestMain.java // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; // // GUIの基本部品であるJLabel(ラベルオブジェクト)をラップする自前のクラス // class Label { // // JLabel(ラベルオブジェクト)の定義 // JLabel object; // // コンストラクタ // // JLabel(ラベルオブジェクト)の生成(ここでデザインの等の決定) // Label(String s){ object = new JLabel(s); } // // JLabel(ラベルオブジェクト)の取得 // JLabel getObject(){ return object; } } // // メインのクラス // class JLabelTestMain { public static void main(String [] args){ JLabelTestMain m = new JLabelTestMain(); // // JLabelの独自ラッパーオブジェクトの生成 // Label lb = new Label("ラベル文字列"); // // JLabelオブジェクトを配置するパネルの生成 // JPanel p = new JPanel(); // // パネル上にJLabelオブジェクトを配置する方法の設定 // p.setLayout(new BorderLayout()); // // パネル上にJLabelオブジェクトを配置 // p.add(lb.getObject(), BorderLayout.CENTER); // // パネルを配置するためのフレーム(ウインドウ)を生成 // JFrame f = new JFrame(); // // パネルを閉じた時の動作を設定(終了) // f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // // フレーム上にパネルを配置する方法の設定 // f.setLayout(new BorderLayout()); // // フレームに関するもろもろの設定 // f.setTitle("JLabelTest"); // f.setSize(200,200); f.setLocation(300,300); // // フレームからコンテナ(表示領域)の取得 // Container c = f.getContentPane(); // // パネルをコンテナ上に配置 // c.add(p, BorderLayout.CENTER); // // 余分な空白を詰め合わせる // f.pack(); // // 可視化する // f.setVisible(true); } }
- フレームがGUIアプリケーションの土台となる。
- フレーム全体にコンテナがかぶさっていて、実際にはこの上にパネルを配置する。
- JLabel等のGUI部品をパネル上に配置する。
- パネル上にパネルを配置するのもあり。複雑なデザインを実現するには不可欠な手法。
絵にすると以下のような感じ...
[GUIオブジェクト][GUIオブジェクト] ... [GUIオブジェクト] ...... ...... [ パ ネ ル ][パネル] ... [パネル] [ コ ン テ ナ ] [ フ レ ー ム ]
JButton(単独のボタン)
// // JButtonTestMain.java // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; // // GUIの基本部品であるJButton(ボタンオブジェクト)をラップする自前のクラス // class Button { // // JButton(ボタンオブジェクト)の定義 // JButton object; // // コンストラクタ // // JButton(ボタンオブジェクト)の生成(ここでデザインの等の決定) // Button(String s){ object = new JButton(s); } // // イベントハンドラの登録 // void setListener(ActionListener eh){ object.addActionListener(eh); } // // JButton(ボタンオブジェクト)の取得 // JButton getObject(){ return object; } } // // イベントハンドラを定義する独自クラス(リスナーオブジェクト) // class Button_Listener implements ActionListener { // // Button(自前ボタンオブジェクト)の定義 // Button so; // // コンストラクタ // // イベントの発生元オブジェクトの設定 // Button_Listener(Button so){ this.so = so; } // // イベントハンドラ本体 // public void actionPerformed(ActionEvent e) { if (e.getSource() == so.getObject()){ System.out.println("OK1"); } } } // // メインのクラス // class JButtonTestMain { public static void main(String [] args){ JButtonTestMain m = new JButtonTestMain(); // // JButtonの独自ラッパーオブジェクトの生成 // Button b = new Button("OK1"); // // JButtonの独自ラッパーオブジェクトに対するイベントハンドラの登録 // b.setListener(new Button_Listener(b)); // // JButtonオブジェクトを配置するパネルの生成 // JPanel p = new JPanel(); // // パネル上にJButtonオブジェクトを配置する方法の設定 // p.setLayout(new BorderLayout()); // // パネル上にJButtonオブジェクトを配置 // p.add(b.getObject(), BorderLayout.CENTER); // // パネルを配置するためのフレーム(ウインドウ)を生成 // JFrame f = new JFrame(); // // パネルを閉じた時の動作を設定(終了) // f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // // フレーム上にパネルを配置する方法の設定 // f.setLayout(new BorderLayout()); // // フレームに関するもろもろの設定 // f.setTitle("JButtonTest"); // f.setSize(200,200); f.setLocation(300,300); // // フレームからコンテナ(表示領域)の取得 // Container c = f.getContentPane(); // // パネルをコンテナ上に配置 // c.add(p, BorderLayout.CENTER); // // 余分な空白を詰め合わせる // f.pack(); // // 可視化する // f.setVisible(true); } }
- イベントハンドラの登録は JButtonオブジェクト.addActionListener(ActionListener イベントハンドラオブジェクト)
- イベントハンドラオブジェクトは必ずActionListenerをインプリメントする。
- イベントハンドラオブジェクト内にactionPerformed(ActionEvent e)の形式でイベントハンドラメソッドを定義する。
JRadioButton(ラジオボタン)
// // JRadioButtonTestMain.java // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; // // GUIの基本部品であるJRadioButton(ラジオボタンオブジェクト)をラップする自前のクラス // class RadioButton { // // JRadioButton(ラジオボタンオブジェクト)の定義 // JRadioButton object; // // その他変数 // String string; // // コンストラクタ // // JRadioButton(ラジオボタンオブジェクト)の生成(ここでデザインの等の決定) // RadioButton(String s){ object = new JRadioButton(s); string = s; } RadioButton(String s, Boolean b){ if (b){ object = new JRadioButton("[" + s + "]", b); }else{ object = new JRadioButton(s, b); } string = s; } // // イベントハンドラの登録 // void setListener(ChangeListener eh){ object.addChangeListener(eh); } // // JRadioButton(ラジオボタンオブジェクト)の取得 // JRadioButton getObject(){ return object; } // // stringの取得 // String getString(){ return string; } } // // イベントハンドラを定義する独自クラス(リスナーオブジェクト) // class RadioButton_Listener implements ChangeListener { // // RadioButton(自前ラジオボタンオブジェクト)の定義 // RadioButton so; // // コンストラクタ // // イベントの発生元オブジェクトの設定 // RadioButton_Listener(RadioButton so){ this.so = so; } // // イベントハンドラ本体 // public void stateChanged(ChangeEvent e) { if (e.getSource() == so.getObject()){ if (so.getObject().isSelected()){ so.getObject().setText("[" + so.getString() + "]"); }else{ so.getObject().setText(so.getString()); } } } } // // メインのクラス // class JRadioButtonTestMain { public static void main(String [] args){ JRadioButtonTestMain m = new JRadioButtonTestMain(); // // JRadioButtonの独自ラッパーオブジェクトの生成 // RadioButton rb1 = new RadioButton("apple", true); RadioButton rb2 = new RadioButton("orange"); RadioButton rb3 = new RadioButton("lemon"); // // JRadioButtonの独自ラッパーオブジェクトに対するイベントハンドラの登録 // rb1.setListener(new RadioButton_Listener(rb1)); rb2.setListener(new RadioButton_Listener(rb2)); rb3.setListener(new RadioButton_Listener(rb3)); // // JRadioButtonオブジェクトをグループ化 // ButtonGroup bg = new ButtonGroup(); bg.add(rb1.getObject()); bg.add(rb2.getObject()); bg.add(rb3.getObject()); // // JRadioButtonオブジェクトを配置するパネルの生成 // JPanel p = new JPanel(); // // パネル上にJRadioButtonオブジェクトを配置する方法の設定 // p.setLayout(new FlowLayout()); // // パネル上にJRadioButtonオブジェクトを配置 // p.add(rb1.getObject()); p.add(rb2.getObject()); p.add(rb3.getObject()); // // パネルを配置するためのフレーム(ウインドウ)を生成 // JFrame f = new JFrame(); // // パネルを閉じた時の動作を設定(終了) // f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // // フレーム上にパネルを配置する方法の設定 // f.setLayout(new BorderLayout()); // // フレームに関するもろもろの設定 // f.setTitle("JRadioButtonTest"); // f.setSize(200,200); f.setLocation(300,300); // // フレームからコンテナ(表示領域)の取得 // Container c = f.getContentPane(); // // パネルをコンテナ上に配置 // c.add(p, BorderLayout.CENTER); // // 余分な空白を詰め合わせる // f.pack(); // // 可視化する // f.setVisible(true); } }
- イベントハンドラの登録は JRadioButtonオブジェクト.addChangeListener(ChangeListener イベントハンドラオブジェクト)
- イベントハンドラオブジェクトは必ずChangeListenerをインプリメントする。
- イベントハンドラオブジェクト内にstateChanged(ChangeEvent e)の形式でイベントハンドラメソッドを定義する。
JCheckBox(チェックボックス)
// // JCheckBoxTestMain.java // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; // // GUIの基本部品であるJCheckBox(チェックボックスオブジェクト)をラップする自前のクラス // class CheckBox { // // JCheckBox(チェックボックスオブジェクト)の定義 // JCheckBox object; // // コンストラクタ // // JCheckBox(チェックボックスオブジェクト)の生成(ここでデザインの等の決定) // CheckBox(String s){ object = new JCheckBox(s); } // // イベントハンドラの登録 // void setListener(ChangeListener eh){ object.addChangeListener(eh); } // // JCheckBox(チェックボックスオブジェクト)の取得 // JCheckBox getObject(){ return object; } } // // イベントハンドラを定義する独自クラス(リスナーオブジェクト) // class CheckBox_Listener implements ChangeListener { // // CheckBox(自前チェックボックスオブジェクト)の定義 // CheckBox so; // // コンストラクタ // // イベントの発生元オブジェクトの設定 // CheckBox_Listener(CheckBox so){ this.so = so; } // // イベントハンドラ本体 // public void stateChanged(ChangeEvent e) { if (e.getSource() == so.getObject()){ if (so.getObject().isSelected()){ so.getObject().setText("ON"); }else{ so.getObject().setText("OFF"); } } } } // // メインのクラス // class JCheckBoxTestMain { public static void main(String [] args){ JCheckBoxTestMain m = new JCheckBoxTestMain(); // // JCheckBoxの独自ラッパーオブジェクトの生成 // CheckBox cb = new CheckBox("OFF"); // // JCheckBoxの独自ラッパーオブジェクトに対するイベントハンドラの登録 // cb.setListener(new CheckBox_Listener(cb)); // // JCheckBoxオブジェクトを配置するパネルの生成 // JPanel p = new JPanel(); // // パネル上にJCheckBoxオブジェクトを配置する方法の設定 // p.setLayout(new BorderLayout()); // // パネル上にJCheckBoxオブジェクトを配置 // p.add(cb.getObject(), BorderLayout.CENTER); // // パネルを配置するためのフレーム(ウインドウ)を生成 // JFrame f = new JFrame(); // // パネルを閉じた時の動作を設定(終了) // f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // // フレーム上にパネルを配置する方法の設定 // f.setLayout(new BorderLayout()); // // フレームに関するもろもろの設定 // f.setTitle("JCheckBoxTest"); // f.setSize(200,200); f.setLocation(300,300); // // フレームからコンテナ(表示領域)の取得 // Container c = f.getContentPane(); // // パネルをコンテナ上に配置 // c.add(p, BorderLayout.CENTER); // // 余分な空白を詰め合わせる // f.pack(); // // 可視化する // f.setVisible(true); } }
- イベントハンドラの登録は JCheckBoxオブジェクト.addChangeListener(ChangeListener イベントハンドラオブジェクト)
- イベントハンドラオブジェクトは必ずChangeListenerをインプリメントする。
- イベントハンドラオブジェクト内にstateChanged(ChangeEvent e)の形式でイベントハンドラメソッドを定義する。
JList(選択一覧リスト)
// // JListTestMain.java // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; // // GUIの基本部品であるJList(選択一覧リスト)をラップする自前のクラス // class List { // // JList(選択一覧リストオブジェクト)の定義 // JList object; // // コンストラクタ // // JList(選択一覧リストオブジェクト)の生成(ここでデザインの等の決定) // List(String [] s){ object = new JList(s); } // // イベントハンドラの登録 // void setListener(ListSelectionListener eh){ object.addListSelectionListener(eh); } // // JList(選択一覧リストオブジェクト)の取得 // JList getObject(){ return object; } } // // イベントハンドラを定義する独自クラス(リスナーオブジェクト) // class List_Listener implements ListSelectionListener { // // List(自前選択一覧リストオブジェクト)の定義 // List so; // // コンストラクタ // // イベントの発生元オブジェクトの設定 // List_Listener(List so){ this.so = so; } // // イベントハンドラ本体 // public void valueChanged(ListSelectionEvent e) { if (e.getSource() == so.getObject()){ System.out.println(so.getObject().getSelectedValue()); } } } // // メインのクラス // class JListTestMain { public static void main(String [] args){ JListTestMain m = new JListTestMain(); // // JListの独自ラッパーオブジェクトの生成 // String [] lists = {"apple", "orange", "lemon"}; List ls = new List(lists); // // JListの独自ラッパーオブジェクトに対するイベントハンドラの登録 // ls.setListener(new List_Listener(ls)); // // JListオブジェクトを配置するパネルの生成 // JPanel p = new JPanel(); // // パネル上にJListオブジェクトを配置する方法の設定 // p.setLayout(new BorderLayout()); // // パネル上にJListオブジェクトを配置 // p.add(ls.getObject(), BorderLayout.CENTER); // // パネルを配置するためのフレーム(ウインドウ)を生成 // JFrame f = new JFrame(); // // パネルを閉じた時の動作を設定(終了) // f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // // フレーム上にパネルを配置する方法の設定 // f.setLayout(new BorderLayout()); // // フレームに関するもろもろの設定 // f.setTitle("JListTest"); // f.setSize(200,200); f.setLocation(300,300); // // フレームからコンテナ(表示領域)の取得 // Container c = f.getContentPane(); // // パネルをコンテナ上に配置 // c.add(p, BorderLayout.CENTER); // // 余分な空白を詰め合わせる // f.pack(); // // 可視化する // f.setVisible(true); } }
- イベントハンドラの登録は JListオブジェクト.addListSelectionListener(ListSelectionListener イベントハンドラオブジェクト)
- イベントハンドラオブジェクトは必ずListSelectionListenerをインプリメントする。
- イベントハンドラオブジェクト内にvalueChanged(ListSelectionEvent e)の形式でイベントハンドラメソッドを定義する。
JSlider(スライダー)
// // JSliderTestMain.java // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; // // GUIの基本部品であるJSlider(スライダー)をラップする自前のクラス // class Slider { // // JSlider(スライダーオブジェクト)の定義 // JSlider object; // // コンストラクタ // // JSlider(スライダーオブジェクト)の生成(ここでデザインの等の決定) // Slider(int min, int max, int val){ object = new JSlider(min, max, val); } // // イベントハンドラの登録 // void setListener(ChangeListener eh){ object.addChangeListener(eh); } // // JSlider(スライダーオブジェクト)の取得 // JSlider getObject(){ return object; } } // // イベントハンドラを定義する独自クラス(リスナーオブジェクト) // class Slider_Listener implements ChangeListener { // // Slider(自前スライダーオブジェクト)の定義 // Slider so; // // コンストラクタ // // イベントの発生元オブジェクトの設定 // Slider_Listener(Slider so){ this.so = so; } // // イベントハンドラ本体 // public void stateChanged(ChangeEvent e) { if (e.getSource() == so.getObject()){ System.out.println(so.getObject().getValue()); } } } // // メインのクラス // class JSliderTestMain { public static void main(String [] args){ JSliderTestMain m = new JSliderTestMain(); // // JSliderの独自ラッパーオブジェクトの生成 // Slider sl = new Slider(0, 100 , 50); // // JSliderの独自ラッパーオブジェクトに対するイベントハンドラの登録 // sl.setListener(new Slider_Listener(sl)); // // JSliderオブジェクトを配置するパネルの生成 // JPanel p = new JPanel(); // // パネル上にJSliderオブジェクトを配置する方法の設定 // p.setLayout(new BorderLayout()); // // パネル上にJSliderオブジェクトを配置 // p.add(sl.getObject(), BorderLayout.CENTER); // // パネルを配置するためのフレーム(ウインドウ)を生成 // JFrame f = new JFrame(); // // パネルを閉じた時の動作を設定(終了) // f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // // フレーム上にパネルを配置する方法の設定 // f.setLayout(new BorderLayout()); // // フレームに関するもろもろの設定 // f.setTitle("JSliderTest"); // f.setSize(200,200); f.setLocation(300,300); // // フレームからコンテナ(表示領域)の取得 // Container c = f.getContentPane(); // // パネルをコンテナ上に配置 // c.add(p, BorderLayout.CENTER); // // 余分な空白を詰め合わせる // f.pack(); // // 可視化する // f.setVisible(true); } }
- イベントハンドラの登録は JSliderオブジェクト.addChangeListener(ChangeListener イベントハンドラオブジェクト)
- イベントハンドラオブジェクトは必ずChangeListenerをインプリメントする。
- イベントハンドラオブジェクト内にstateChanged(ChangeEvent e)の形式でイベントハンドラメソッドを定義する。
JTextField(一行テキスト入力)
// // JTextFieldTestMain.java // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; // // GUIの基本部品であるJTextField(一行テキスト入力)をラップする自前のクラス // class TextField { // // JTextField(一行テキスト入力オブジェクト)の定義 // JTextField object; // // コンストラクタ // // JTextField(一行テキスト入力オブジェクト)の生成(ここでデザインの等の決定) // TextField(String s, int col){ object = new JTextField(s, col); } // // JTextField(一行テキスト入力オブジェクト)の取得 // JTextField getObject(){ return object; } } // // GUIの基本部品であるJButton(単独ボタン)をラップする自前のクラス // class Button { // // JButton(単独ボタンオブジェクト)の定義 // JButton object; // // コンストラクタ // // JButton(単独ボタンオブジェクト)の生成(デザインの決定等) // Button(String s){ object = new JButton(s); } // // イベントハンドラの登録 // void setListener(ActionListener eh){ object.addActionListener(eh); } // // JButton(単独ボタンオブジェクト)の取得 // JButton getObject(){ return object; } } // // イベントハンドラを定義する独自クラス(リスナーオブジェクト) // class Button_Listener implements ActionListener { // // Button(自前単独ボタンオブジェクト)の定義 // TextField(自前一行テキスト入力オブジェクト)の定義 // Button so; TextField tf; // // コンストラクタ // // イベントの発生元(等)オブジェクトの設定 // Button_Listener(Button so, TextField tf){ this.so = so; this.tf = tf; } // // イベントハンドラ本体 // public void actionPerformed(ActionEvent e) { if (e.getSource() == so.getObject()){ System.out.println(tf.getObject().getText()); } } } // // メインのクラス // class JTextFieldTestMain { public static void main(String [] args){ JTextFieldTestMain m = new JTextFieldTestMain(); // // JTextFieldの独自ラッパーオブジェクトの生成 // JButtonの独自ラッパーオブジェクトの生成 // TextField tf = new TextField("初期文字列", 20); Button b = new Button("Get!"); // // JButtonの独自ラッパーオブジェクトに対するイベントハンドラの登録 // b.setListener(new Button_Listener(b, tf)); // // JTextFieldオブジェクト、JButtonオブジェクトを配置するパネルの生成 // JPanel p = new JPanel(); // // パネル上にJTextFieldオブジェクト、JButtonオブジェクトを配置する方法の設定 // p.setLayout(new FlowLayout()); // // パネル上にJTextFieldオブジェクト、JButtonオブジェクトを配置 // p.add(tf.getObject()); p.add(b.getObject()); // // パネルを配置するためのフレーム(ウインドウ)を生成 // JFrame f = new JFrame(); // // パネルを閉じた時の動作を設定(終了) // f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // // フレーム上にパネルを配置する方法の設定 // f.setLayout(new BorderLayout()); // // フレームに関するもろもろの設定 // f.setTitle("JTextFieldTest"); // f.setSize(200,200); f.setLocation(300,300); // // フレームからコンテナ(表示領域)の取得 // Container c = f.getContentPane(); // // パネルをコンテナ上に配置 // c.add(p, BorderLayout.CENTER); // // 余分な空白を詰め合わせる // f.pack(); // // 可視化する // f.setVisible(true); } }
JTextArea(複数行テキスト入力)
// // JTextAreaTestMain.java // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; // // GUIの基本部品であるJTextArea(複数行テキスト入力)をラップする自前のクラス // class TextArea { // // JTextArea(複数行テキスト入力オブジェクト)の定義 // JTextArea object; // // コンストラクタ // // JTextArea(複数行テキスト入力オブジェクト)の生成(デザインの決定等) // TextArea(String s, int row, int col){ object = new JTextArea(s, row, col); } // // JTextArea(複数行テキスト入力オブジェクト)の取得 // JTextArea getObject(){ return object; } } // // GUIの基本部品であるJButton(単独ボタン)をラップする自前のクラス // class Button { // // JButton(単独ボタンオブジェクト)の定義 // JButton object; // // コンストラクタ // // JButton(単独ボタンオブジェクト)の生成(デザインの決定等) // Button(String s){ object = new JButton(s); } // // イベントハンドラの登録 // void setListener(ActionListener eh){ object.addActionListener(eh); } // // JButton(単独ボタンオブジェクト)の取得 // JButton getObject(){ return object; } } // // イベントハンドラを定義する独自クラス(リスナーオブジェクト) // class Button_Listener implements ActionListener { // // Button(自前単独ボタンオブジェクト)の定義 // TextArea(自前複数行テキスト入力オブジェクト)の定義 // Button so; TextArea ta; // // コンストラクタ // // イベントの発生元(等)オブジェクトの設定 // Button_Listener(Button so, TextArea ta){ this.so = so; this.ta = ta; } // // イベントハンドラ本体 // public void actionPerformed(ActionEvent e) { if (e.getSource() == so.getObject()){ System.out.println(ta.getObject().getText()); } } } // // メインのクラス // class JTextAreaTestMain { public static void main(String [] args){ JTextAreaTestMain m = new JTextAreaTestMain(); // // JTextFieldの独自ラッパーオブジェクトの生成 // GUIの基本部品であるJScrollPaneオブジェクトの生成 // JButtonの独自ラッパーオブジェクトの生成 // TextArea ta = new TextArea("初期文字列", 5, 20); JScrollPane sp = new JScrollPane(ta.getObject()); Button b = new Button("Get!"); // // JButtonの独自ラッパーオブジェクトに対するイベントハンドラの登録 // b.setListener(new Button_Listener(b, ta)); // // JScrollPaneオブジェクト、JButtonオブジェクトを配置するパネルの生成 // JPanel p = new JPanel(); // // JScrollPaneオブジェクト、JButtonオブジェクトを配置する方法の設定 // p.setLayout(new FlowLayout()); // // JScrollPaneオブジェクト、JButtonオブジェクトを配置 // p.add(sp); p.add(b.getObject()); // // パネルを配置するためのフレーム(ウインドウ)を生成 // JFrame f = new JFrame(); // // パネルを閉じた時の動作を設定(終了) // f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // // フレーム上にパネルを配置する方法の設定 // f.setLayout(new BorderLayout()); // // フレームに関するもろもろの設定 // f.setTitle("JTextAreaTest"); // f.setSize(200,200); f.setLocation(300,300); // // フレームからコンテナ(表示領域)の取得 // Container c = f.getContentPane(); // // パネルをコンテナ上に配置 // c.add(p, BorderLayout.CENTER); // // 余分な空白を詰め合わせる // f.pack(); // // 可視化する // f.setVisible(true); } }
FlowLayout(フローレイアウト方式 - 左から右へ流し込み)
// // JFlowLayoutTestMain.java // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; // class Button { JButton object; String string; Button(String s){ object = new JButton(s); string = s; } void setListener(ActionListener eh){ object.addActionListener(eh); } JButton getObject(){ return object; } } // class Button_Listener implements ActionListener { Button so; Button_Listener(Button so){ this.so = so; } public void actionPerformed(ActionEvent e) { if (e.getSource() == so.getObject()){ System.out.println(so.string); } } } // class JFlowLayoutTestMain { public static void main(String [] args){ JFlowLayoutTestMain m = new JFlowLayoutTestMain(); Button b1 = new Button("OK1"); Button b2 = new Button("OK2"); Button b3 = new Button("OK3"); b1.setListener(new Button_Listener(b1)); b2.setListener(new Button_Listener(b2)); b3.setListener(new Button_Listener(b3)); // // GUI部品オブジェクトを配置するパネルの生成 // JPanel p = new JPanel(); // // パネル上にGUI部品オブジェクトを配置する方法の設定 // p.setLayout(new FlowLayout()); // // パネル上にGUI部品オブジェクトを配置 // p.add(b1.getObject()); p.add(b2.getObject()); p.add(b3.getObject()); JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLayout(new BorderLayout()); f.setTitle("JButtonTest"); // f.setSize(200,200); f.setLocation(300,300); Container c = f.getContentPane(); c.add(p, BorderLayout.CENTER); f.pack(); f.setVisible(true); } }
BorderLayout(ボーダーレイアウト方式 - 東西南北中央)
// // JBorderLayoutTestMain.java // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; // class Button { JButton object; String string; Button(String s){ object = new JButton(s); string = s; } void setListener(ActionListener eh){ object.addActionListener(eh); } JButton getObject(){ return object; } } // class Button_Listener implements ActionListener { Button so; Button_Listener(Button so){ this.so = so; } public void actionPerformed(ActionEvent e) { if (e.getSource() == so.getObject()){ System.out.println(so.string); } } } // class JBorderLayoutTestMain { public static void main(String [] args){ JBorderLayoutTestMain m = new JBorderLayoutTestMain(); Button b1 = new Button("North"); Button b2 = new Button("East"); Button b3 = new Button("South"); Button b4 = new Button("West"); Button b5 = new Button("Center"); b1.setListener(new Button_Listener(b1)); b2.setListener(new Button_Listener(b2)); b3.setListener(new Button_Listener(b3)); b4.setListener(new Button_Listener(b4)); b5.setListener(new Button_Listener(b5)); // // GUI部品オブジェクトを配置するパネルの生成 // JPanel p = new JPanel(); // // パネル上にGUI部品オブジェクトを配置する方法の設定 // p.setLayout(new BorderLayout()); // // パネル上にGUI部品オブジェクトを配置 // p.add(b1.getObject(), BorderLayout.NORTH); p.add(b2.getObject(), BorderLayout.EAST); p.add(b3.getObject(), BorderLayout.SOUTH); p.add(b4.getObject(), BorderLayout.WEST); p.add(b5.getObject(), BorderLayout.CENTER); JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLayout(new BorderLayout()); f.setTitle("JButtonTest"); // f.setSize(200,200); f.setLocation(300,300); Container c = f.getContentPane(); c.add(p, BorderLayout.CENTER); f.pack(); f.setVisible(true); } }
GridLayout(グリッドレイアウト方式 - 格子状に配置)
// // JGridLayoutTestMain.java // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; // class Button { JButton object; String string; Button(String s){ object = new JButton(s); string = s; } void setListener(ActionListener eh){ object.addActionListener(eh); } JButton getObject(){ return object; } } // class Button_Listener implements ActionListener { Button so; Button_Listener(Button so){ this.so = so; } public void actionPerformed(ActionEvent e) { if (e.getSource() == so.getObject()){ System.out.println(so.string); } } } // class JGridLayoutTestMain { public static void main(String [] args){ JGridLayoutTestMain m = new JGridLayoutTestMain(); Button b1 = new Button("OK1"); Button b2 = new Button("OK2"); Button b3 = new Button("OK3"); Button b4 = new Button("OK4"); Button b5 = new Button("OK5"); Button b6 = new Button("OK6"); b1.setListener(new Button_Listener(b1)); b2.setListener(new Button_Listener(b2)); b3.setListener(new Button_Listener(b3)); b4.setListener(new Button_Listener(b4)); b5.setListener(new Button_Listener(b5)); b6.setListener(new Button_Listener(b6)); // // GUI部品オブジェクトを配置するパネルの生成 // JPanel p = new JPanel(); // // パネル上にGUI部品オブジェクトを配置する方法の設定 // p.setLayout(new GridLayout(3,2)); // // パネル上にGUI部品オブジェクトを配置 // p.add(b1.getObject()); p.add(b2.getObject()); p.add(b3.getObject()); p.add(b4.getObject()); p.add(b5.getObject()); p.add(b6.getObject()); JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLayout(new BorderLayout()); f.setTitle("JButtonTest"); // f.setSize(200,200); f.setLocation(300,300); Container c = f.getContentPane(); c.add(p, BorderLayout.CENTER); f.pack(); f.setVisible(true); } }
グラフィックス描画
// // JGraphTestMain.java // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; // // 描画の対象となるオブジェクト // class MyPanel extends JPanel { // // 描画に使用されるパラメータ // int x = 50; int y = 100; Graphics g; // // コンストラクタ // public MyPanel() { setBackground(Color.white); } // // イベントハンドラからのパラメータ設定 // public void setXY(int x, int y) { this.x = x; this.y = y; } // // イベントハンドラからの再描画 // public void repaint() { super.repaint(); } // // // public Graphics getG() { return g; } // // 描画処理 // public void paintComponent(Graphics g) { this.g = g; super.paintComponent(g); // ウィンドウ内に描画したい図形をここに書く g.setColor(Color.red); g.fillRect(x,y,100,100); g.drawRect(x+150,y,100,100); g.setColor(Color.black); g.drawLine(x+300,y,x+400,y+100); g.setColor(Color.gray); g.fillOval(x,y+140,100,100); g.drawOval(x+150,y+140,100,100); g.setColor(Color.black); g.drawString("Welcome to java graphics.", x-40, y-80); } } // // イベントハンドラのオブジェクト // class MyPanel_Listener implements MouseMotionListener{ // // イベントを受け取るオブジェクト // MyPanel p; // // コンストラクタ // public MyPanel_Listener (MyPanel p){ this.p = p; } // // イベントハンドラ本体 for MouseMotionListener // public void mouseDragged(MouseEvent e) { if (e.getSource() == p){ p.getG().setColor(Color.blue); p.getG().fillRect(e.getX(),e.getY(),400,400); p.setXY(e.getX(),e.getY()); p.repaint(); } } public void mouseMoved(MouseEvent e) { } } class JGraphTestMain { public static void main(String [] args){ JGraphTestMain m = new JGraphTestMain(); // // GUI部品ソースオブジェクトの生成 // MyPanel p = new MyPanel(); // // マウス用移動イベントハンドラの登録 // p.addMouseMotionListener(new MyPanel_Listener(p)); // // パネルを配置するためのフレーム(ウインドウ)を生成 // JFrame f = new JFrame(); // // パネルを閉じた時の動作を設定(終了) // f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // // フレーム上にパネルを配置する方法の設定 // f.setLayout(new BorderLayout()); // // フレームに関するもろもろの設定 // f.setTitle("JButtonTest"); f.setSize(640,480); f.setLocation(300,300); // // フレームからコンテナ(表示領域)の取得 // Container c = f.getContentPane(); // // パネルをコンテナ上に配置 // c.add(p, BorderLayout.CENTER); // // 余分な空白を詰め合わせる // //f.pack(); // // 可視化する // f.setVisible(true); } }
- 描画の対象となるオブジェクトはJPanelクラスを継承する。
- 描画の対象となるオブジェクト内にpaintComponent(Graphics g)メソッドを定義し、その中で描画処理を行う。
- 描画処理を行うpaintComponent(Graphics g)メソッドは直接呼び出さずに、親クラスであるJPanelのrepaint()メソッドを呼び出す。
マウスイベント処理
// // JMouseTestMain.java // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; // class Button { JButton object; Button(String s){ object = new JButton(s); } void setListener(ActionListener eh){ object.addActionListener(eh); } // // マウス用操作イベントハンドラの登録 // void setMouseListener(MouseListener eh){ object.addMouseListener(eh); } // // マウス用移動イベントハンドラの登録 // void setMouseMotionListener(MouseMotionListener eh){ object.addMouseMotionListener(eh); } JButton getObject(){ return object; } } // class Button_Listener implements ActionListener { Button so; Button_Listener(Button so){ this.so = so; } public void actionPerformed(ActionEvent e) { if (e.getSource() == so.getObject()){ System.out.println("OK1"); } } } // // マウス用操作リスナーオブジェクト // class Button_Mouse_Listener implements MouseListener { // // GUI部品ソースオブジェクト // Button so; // // コンストラクタ:処理するイベントの発生元GUIソースオブジェクトの設定 // Button_Mouse_Listener(Button so){ this.so = so; } // // イベントハンドラ本体 for MouseListener // public void mousePressed(MouseEvent e) { if (e.getSource() == so.getObject()){ System.out.println("mousePressed at " + Integer.toString(e.getX()) + "," + Integer.toString(e.getY())); } } public void mouseReleased(MouseEvent e) { if (e.getSource() == so.getObject()){ System.out.println("mouseReleased at " + Integer.toString(e.getX()) + "," + Integer.toString(e.getY())); } } public void mouseClicked(MouseEvent e) { if (e.getSource() == so.getObject()){ System.out.println("mouseClicked at " + Integer.toString(e.getX()) + "," + Integer.toString(e.getY())); } } public void mouseEntered(MouseEvent e) { if (e.getSource() == so.getObject()){ System.out.println("mouseEntered at " + Integer.toString(e.getX()) + "," + Integer.toString(e.getY())); } } public void mouseExited(MouseEvent e) { if (e.getSource() == so.getObject()){ System.out.println("mouseExited at " + Integer.toString(e.getX()) + "," + Integer.toString(e.getY())); } } } // // GUI部品マウス用移動リスナーオブジェクト // class Button_Mouse_Motion_Listener implements MouseMotionListener { // // GUI部品ソースオブジェクト // Button so; // // コンストラクタ:処理するイベントの発生元GUIソースオブジェクトの設定 // Button_Mouse_Motion_Listener(Button so){ this.so = so; } // // イベントハンドラ本体 for MouseMotionListener // public void mouseDragged(MouseEvent e) { if (e.getSource() == so.getObject()){ System.out.println("mouseDragged at " + Integer.toString(e.getX()) + "," + Integer.toString(e.getY())); } } public void mouseMoved(MouseEvent e) { if (e.getSource() == so.getObject()){ System.out.println("mouseMoved at " + Integer.toString(e.getX()) + "," + Integer.toString(e.getY())); } } } class JMouseTestMain { public static void main(String [] args){ JMouseTestMain m = new JMouseTestMain(); Button b = new Button("OK1"); b.setListener(new Button_Listener(b)); // // マウス用操作イベントハンドラの登録 // b.setMouseListener(new Button_Mouse_Listener(b)); // // マウス用移動イベントハンドラの登録 // b.setMouseMotionListener(new Button_Mouse_Motion_Listener(b)); JPanel p = new JPanel(); p.setLayout(new BorderLayout()); p.add(b.getObject(), BorderLayout.CENTER); JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLayout(new BorderLayout()); f.setTitle("JButtonTest"); // f.setSize(200,200); f.setLocation(300,300); Container c = f.getContentPane(); c.add(p, BorderLayout.CENTER); f.pack(); f.setVisible(true); } }
- マウスボタンのプレス、リリース、クリック、マウスカーソルがオブジェクトに入った、出ていったの5種類のイベントを処理するハンドラをaddMouseListener(MouseListener eh)メソッドで登録する。
- マウスカーソルのドラグ、移動の2種類のイベントを処理するハンドラをaddMouseMotionListener(MouseMotionListener eh)メソッドで登録する。
- addMouseListener()で登録するハンドラオブジェクトはMouseListenerインターフェースをインプリメント(mousePressed()、mouseReleased()、mouseClicked()、mouseEntered()、mouseExited()のメソッドを定義)する。
- addMouseMotionListener()で登録するハンドラオブジェクトはMouseMotionListenerインターフェースをインプリメント(mouseDragged()、mouseMoved()のメソッドを定義)する。