LectureMMP06
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[Lecture]]
*Java プログラミング入門 [#kd7c750b]
このページは、学部2年生向け授業である、「マルチメディア...
のために用意しました。
(Wikiの仕様で大文字小文字が混在した英単語に疑問符?が追...
**第12章 Swing [#n78c2cf0]
SwingはJavaのパッケージで、GUIを構築するための数多くのcla...
***歴史(AWTとの違い) [#f1351d32]
初期のJavaでは、AWT (Abstract Window Toolkit) というパッ...
***クラスJFrame [#t7348676]
まずはJFrameというSwingのクラスを使います。Frameは枠のこ...
JはJavaのJです。
以下のリンクからJFrameクラスを選択して、何ができるかざっ...
https://docs.oracle.com/javase/jp/8/docs/api/index.html
- 次に簡単なウィンドウを出してみましょう。
授業の最初で作ったウィンドウを出すプログラムです。
import javax.swing.JFrame;
public class SimpleWindow {
public static void main(String argv[]) {
JFrame f = new JFrame("私が作った最初の窓...
f.setSize(200,100);
f.setVisible(true);
}
}
このままだと、ウィンドウを閉じてもプログラムは終了しませ...
ウィンドウを閉じた時に、プログラムを終了するかしないかは...
ウィンドウを閉じるとプログラムが終了するようにしてみまし...
import javax.swing.JFrame;
public class SimpleWindow {
public static void main(String argv[]) {
JFrame f = new JFrame("私が作った最初の窓...
f.setSize(200,100);
f.setDefaultCloseOperation(JFrame.EXIT_ON...
f.setVisible(true);
}
}
このプログラムをよくみていきましょう。
mainの最初の行で、JFrameのコンストラクタを呼び出して、イ...
引数付きのコンストラクタを使っています。Stringの引数を使...
作ったインスタンスはJFrameを参照する変数 f に代入されてい...
mainの2行目では、JFrameのインスタンスメソッドであるsetSi...
mainの最後の行では、setVisible()メソッドを呼んでいます。...
*** JFrameを継承するプログラミング [#j767173a]
アプリケーションで使うウィンドウを作る時の流儀の一つに、...
import javax.swing.JFrame;
public class SimpleWindow extends JFrame {
public void initialize () {
this.setTitle("私が作った最初の窓");
this.setSize(200,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main (String argv[]) {
SimpleWindow sw = new SimpleWindow();
sw.initialize();
}
}
このプログラムでは、JFrameを継承して、サブクラスとしてSim...
なので、SimpleWindowのインスタンスは、JFrameの機能を全て...
別のプログラムからSimpleWindowのインスタンスを作って表示...
mainでは、自分自身のインスタンスを作って、それへの参照をs...
そしてinitialize()というインスタンスメソッドを呼んでいま...
initialize()は今の所SimpleWindowで新たに定義した唯一のメ...
その名の通り、自分自身の初期化を行うつもりで命名しました。
コンストラクタとして実装しても良いのですが、結構複雑な仕...
別のメソッドにしました。ちなみに、他のオブジェクト指向言...
newした後に、init()とかinitialize()とかのメソッドを呼ぶ方...
ここではそれを真似しました。
initialize()の中で、ウィンドウのタイトルを決めて、サイズ...
***ラベルを表示するウィンドウ [#dc55da2c]
このままではウィンドウが空っぽなので、文字を表示してみま...
文字を表示するクラスにJLabelがあります。その名の通りラベ...
以下のリンクからJLabelクラスを選択して、何ができるかざっ...
https://docs.oracle.com/javase/jp/8/docs/api/index.html
基本的な使い方は以下です。まずは、インスタンスを作ります...
JLabel label = new JLabel("Hello!");
ところで、JFrameで作ったインスタンスは、Containerというク...
Container content = this.getContentPane();
で、自分自身のコンテントペーンを返してくれます。
これに対して、上記で作ったラベルインスタンスをaddすること...
content.add(label);
上記の、継承を使ったプログラムによるウィンドウの中に、
Hello!という文字を出してみよう。
上で紹介した3行を、initialize()メソッドに加えれば文字を...
解答例:
import javax.swing.*;
import java.awt.*;
public class SimpleWindow extends JFrame {
public void initialize () {
this.setTitle("私が作った最初の窓");
JLabel label = new JLabel("Hello!");
Container content = this.getContentPane();
content.add(label);
this.setSize(200,100);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String argv[]) {
SimpleWindow sw = new SimpleWindow();
sw.initialize();
}
}
コンテンツの大きさに合わせてウィンドウサイズを変更する機...
上記のプログラムではsetSize()で変更していますが、これの代...
this.pack();
というメソッドを呼び出してみましょう。以下のようになるは...
http://gyazo.com/c6efe47de19436f7564660377fe8b98c.png
解答例:
import javax.swing.*;
import java.awt.*;
public class SimpleWindow extends JFrame {
public void initialize () {
this.setTitle("私が作った最初の窓");
JLabel label = new JLabel("Hello!");
Container content = this.getContentPane();
content.add(label);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String argv[]) {
SimpleWindow sw = new SimpleWindow();
sw.initialize();
}
}
***ボタンを1個表示するウィンドウ [#ied43afe]
今度はウィンドウにボタンを表示してみましょう。
ボタンなので、多分JButtonというクラスがありそうです。
以下から探して、何ができるかざっと見ておきましょう。
https://docs.oracle.com/javase/jp/8/docs/api/index.html
上記のプログラムのJLabelのところをJButtonにすればだいたい...
解答例:
import javax.swing.*;
import java.awt.*;
public class SimpleWindow extends JFrame {
public void initialize () {
this.setTitle("私が作った最初の窓");
JButton button = new JButton("Hello!");
Container content = this.getContentPane();
content.add(button);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String argv[]) {
SimpleWindow sw = new SimpleWindow();
sw.initialize();
}
}
//http://is.ocha.ac.jp/~siio/index.php?plugin=attach&pcmd...
//ここまで
***ボタンを2個表示するウィンドウ [#cb6cf696]
上のプログラムのように、
getContentPane()で得られたContainerに直接ボタンを貼付ける...
しかし、貼付けられるのは一つのボタンだけのようです。
2個以上のボタンを貼り付けるためには、JPanel(パネル、板...
これに複数のボタンを貼り付け(addする)、
そのパネルとJFrameのcontentに貼り付けます。
こんな感じのイメージです。
http://gyazo.com/03c28df2419065241b8736b7b69d7fd3.png
2個のボタンを出してみましょう。
手順としては、
+JPanelのインスタンスを作る(パネル)
+JButtonのインスタンスを2個作る(ボタン)
+パネルにボタンをadd()する
+JFrameのContent Paneを取り寄せる
+Content Paneにパネルをadd()する
です。(順番は多少前後しても構いません)
http://gyazo.com/4c3086ae9b6b5434d2ea741369f731c5.png
解答例:
import javax.swing.*;
import java.awt.*;
public class SimpleButton extends JFrame {
public void initialize () {
this.setTitle("私が作った最初の窓");
JPanel panel = new JPanel();
JButton button1 = new JButton("button1");
JButton button2 = new JButton("button2");
panel.add(button1);
panel.add(button2);
Container container = this.getContentPane();
container.add(panel);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String argv[]) {
SimpleButton sw = new SimpleButton();
sw.initialize();
}
}
***イベントハンドラー [#pdede994]
これからがGUIプログラミングの重要なところです。
GUIプログラミングでは、ユーザがマウスをクリックしたり、ボ...
現在のプログラムでは,ボタンを押しても何もおこりません.
ボタンが押されたイベントに対応するイベントハンドラーが無...
ボタンが押されたイベントを受け取るためには,
+Action Listenerをimplementしたクラスを作る
+そのインスタンスを作る
+これをボタンにaddActionListener()で登録する
必要があります.このインスタンスが、イベントを受け取るイ...
上の、ボタンが2つあるプログラムで、button1が押された時に...
ボタンのイベントを受け取るインスタンスは、新しく作成して...
ここではSimpleWindowから作ったインスタンスでイベントを受...
現在、SimpleWindowはJFrameを継承していますが、これに加え...
Action Listenerをインプレメントすることは、
Action Listenerが持っているメソッドを全て用意していますと...
この場合、そのメソッドは、actionPerformed()というメソッド...
なので、これを用意します。そこではHelloと表示することにし...
さらに、button1のAction Listenerとして、Simple Windowのイ...
これは、button1にアクションが発生したら、こちらのインスタ...
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleButton extends JFrame implements Acti...
public void initialize () {
this.setTitle("私が作った最初の窓");
JPanel panel = new JPanel();
JButton button1 = new JButton("button1");
JButton button2 = new JButton("button2");
button1.addActionListener(this);
panel.add(button1);
panel.add(button2);
Container container = this.getContentPane();
container.add(panel);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed (ActionEvent e) {
System.out.println("Hello");
}
public static void main(String argv[]) {
SimpleButton sw = new SimpleButton();
sw.initialize();
}
}
これで、button1を押した時にHelloと表示されるようになりま...
button2を押しても、何もおきません。Action Listenerが登録...
演習:button2のAction Listenerとしても、自分自身を登録し...
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleButton extends JFrame implements Acti...
public void initialize () {
this.setTitle("私が作った最初の窓");
JPanel panel = new JPanel();
JButton button1 = new JButton("button1");
JButton button2 = new JButton("button2");
button1.addActionListener(this);
button2.addActionListener(this);
panel.add(button1);
panel.add(button2);
Container container = this.getContentPane();
container.add(panel);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed (ActionEvent e) {
System.out.println("Hello");
}
public static void main(String argv[]) {
SimpleButton sw = new SimpleButton();
sw.initialize();
}
}
この結果、button1でもbutton2でも、どちらも押されればHello...
***Actionの識別 [#s45f3f97]
button1を押した時はHelloと表示され、button2を押した時はGo...
http://gyazo.com/67d27d0588f4dd5d11410e1107165994.png
ボタンごとに違うインスタンスをadd Action Listenerで追加す...
今回の例のように同じインスタンス(ここではthis)をリスナ...
このメソッドで受け取る引数はActio Eventのインスタンスです。
このインスタンスは、発生したイベントの情報を持っています。
Action Eventにはどういうインスタンス変数・メソッドがある...
https://docs.oracle.com/javase/jp/8/docs/api/index.html
今回は、この中のget Source()メソッドを使いましょう。
このメソッドで、イベントを発生したインスタンスがわかりま...
正確には、イベントを発生したインスタンスへの参照がわかり...
なので、それがbutton1だったのか、button2だったのかをif文...
その結果、HelloかGoodbyeを表示すれば良いです。
ただし、今のプログラムでは、変数button1, button2はinitial...
ヒント(最初の6行です)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleButton extends JFrame implements Acti...
JButton button1, button2;
public void initialize () {
演習:このヒントを元に、button1を押した時はHelloと表示さ...
解答例:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleButton extends JFrame implements Acti...
JButton button1, button2;
public void initialize () {
this.setTitle("私が作った最初の窓");
JPanel panel = new JPanel();
button1 = new JButton("button1");
button2 = new JButton("button2");
button1.addActionListener(this);
button2.addActionListener(this);
panel.add(button1);
panel.add(button2);
Container container = this.getContentPane();
container.add(panel);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed (ActionEvent e) {
if(e.getSource()==button1)
System.out.println("Hello");
else
System.out.println("Goodbye");
}
public static void main(String argv[]) {
SimpleButton sw = new SimpleButton();
sw.initialize();
}
}
ここではボタンを区別するために、インスタンス(への参照)...
一つは、ボタンのテキスト(ボタンの上に表示されている文字...
ボタンのテキストは、get Text()メソッドで入手できます。
以下のように変更すると、ボタンのテキストが表示されるよう...
ボタンに、HelloとGoodbyeを表示しておけば、それらが表示さ...
ボタンのテキストを文字列比較して、処理を変えることも可能...
public void actionPerformed(ActionEvent e){
System.out.println(((JButton)e.getSource...
}
もう一つは、ボタンにコマンドを書く方法です。
ボタンにsetActionCommand(String)を定義しておくと、getActi...
例えば、
button1.setActionCommand("hello");
としておけば、actionPerformedの中で
e.getActionCommand();
で文字列を得られます。なので、例えば、
public void actionPerformed(ActionEvent e){
System.out.println(e.getActionCommand());
}
でコマンド部分を印刷できます。コマンドを文字列比較して、...
//***宿題:プログラム12.4 [#sb6fece9]
//***プログラム12.4をやってください。 [#k14ed280]
//***演習12.2(改) [#q3f681b0]
***ボタンのレイアウト [#v426213f]
#ref(5buttons.png)
以下のプログラムで5個のボタンをレイアウトできます。
パネルに、Border Layourのインスタンスを設定しています。
また、パネルにaddする時に、Border Layoutクラスのクラス変...
これで東西南北中央に配置されます。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class BorderLayoutSample extends JFrame {
public void initialize() {
this.setTitle("Simple Window");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(new JButton("WEST"),BorderLayou...
panel.add(new JButton("CENTER"),BorderLay...
panel.add(new JButton("EAST"),BorderLayou...
panel.add(new JButton("NORTH"),BorderLayo...
panel.add(new JButton("SOUTH"),BorderLayo...
Container container = this.getContentPane...
container.add(panel);
this.pack();
setDefaultCloseOperation(JFrame.EXIT_ON_C...
setVisible(true);
}
public static void main (String args[]) {
BorderLayoutSample f = new BorderLayoutSa...
f.initialize();
}
}
演習:このプログラムがボタンのイベントを処理するように変...
#ref(borderlayout.png)
ヒント:
((JButton)e.getSource()).getText()
でボタンの文字を取得できます。
解答例:
イベントハンドラーでボタンの名前を表示しています。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class BorderLayoutSample extends JFrame implement...
public void initialize() {
JButton[] button;
this.setTitle("Simple Window");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
button = new JButton[5];
panel.add(button[0]=new JButton("WEST"),B...
panel.add(button[1]=new JButton("CENTER")...
panel.add(button[2]=new JButton("EAST"),B...
panel.add(button[3]=new JButton("NORTH"),...
panel.add(button[4]=new JButton("SOUTH"),...
for(int i=0; i < button.length; i++) {
button[i].addActionListener(this);
}
Container container = this.getContentPane...
container.add(panel);
this.pack();
setDefaultCloseOperation(JFrame.EXIT_ON_C...
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
System.out.println(((JButton)e.getSource(...
}
public static void main (String args[]) {
BorderLayoutSample f = new BorderLayoutSa...
f.initialize();
}
}
解答例2:
イベントハンドラーでボタンに割り当てられたコマンドを表示...
上記の例よりは複雑ですが、コマンドを使うメリットはありま...
この例ではメリットを活かせていませんが、
コマンドを割り当てると、ボタンの名前を変更しても影響が出...
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class BorderLayoutSample extends JFrame implement...
public void initialize() {
JButton[] button;
this.setTitle("Simple Window");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
button = new JButton[5];
panel.add(button[0]=new JButton("WEST"),B...
panel.add(button[1]=new JButton("CENTER")...
panel.add(button[2]=new JButton("EAST"),B...
panel.add(button[3]=new JButton("NORTH"),...
panel.add(button[4]=new JButton("SOUTH"),...
for(int i=0; i < button.length; i++) {
button[i].addActionListener(this);
button[i].setActionCommand(button...
}
Container container = this.getContentPane...
container.add(panel);
this.pack();
setDefaultCloseOperation(JFrame.EXIT_ON_C...
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
System.out.println(e.getActionCommand());
}
public static void main (String args[]) {
BorderLayoutSample f = new BorderLayoutSa...
f.initialize();
}
}
演習:このプログラムを参考にして、
上で作った二つのボタンのプログラム、Simple Buttonに対して...
演習のヒント
bt1 = new JButton("button1");
bt2 = new JButton("button2");
panel.setLayout(new FlowLayout(FlowLayout.RIGHT));
// bt1.setActionCommand("this is b1");
// bt2.setActionCommand("this is b2");
FlowLayoutにはCENTER, LEFT, RIGHTなどの揃え方の指定があり...
panel.setLayout(new FlowLayout(FlowLayout.CENTER));
panel.setLayout(new FlowLayout(FlowLayout.LEFT));
終了行:
[[Lecture]]
*Java プログラミング入門 [#kd7c750b]
このページは、学部2年生向け授業である、「マルチメディア...
のために用意しました。
(Wikiの仕様で大文字小文字が混在した英単語に疑問符?が追...
**第12章 Swing [#n78c2cf0]
SwingはJavaのパッケージで、GUIを構築するための数多くのcla...
***歴史(AWTとの違い) [#f1351d32]
初期のJavaでは、AWT (Abstract Window Toolkit) というパッ...
***クラスJFrame [#t7348676]
まずはJFrameというSwingのクラスを使います。Frameは枠のこ...
JはJavaのJです。
以下のリンクからJFrameクラスを選択して、何ができるかざっ...
https://docs.oracle.com/javase/jp/8/docs/api/index.html
- 次に簡単なウィンドウを出してみましょう。
授業の最初で作ったウィンドウを出すプログラムです。
import javax.swing.JFrame;
public class SimpleWindow {
public static void main(String argv[]) {
JFrame f = new JFrame("私が作った最初の窓...
f.setSize(200,100);
f.setVisible(true);
}
}
このままだと、ウィンドウを閉じてもプログラムは終了しませ...
ウィンドウを閉じた時に、プログラムを終了するかしないかは...
ウィンドウを閉じるとプログラムが終了するようにしてみまし...
import javax.swing.JFrame;
public class SimpleWindow {
public static void main(String argv[]) {
JFrame f = new JFrame("私が作った最初の窓...
f.setSize(200,100);
f.setDefaultCloseOperation(JFrame.EXIT_ON...
f.setVisible(true);
}
}
このプログラムをよくみていきましょう。
mainの最初の行で、JFrameのコンストラクタを呼び出して、イ...
引数付きのコンストラクタを使っています。Stringの引数を使...
作ったインスタンスはJFrameを参照する変数 f に代入されてい...
mainの2行目では、JFrameのインスタンスメソッドであるsetSi...
mainの最後の行では、setVisible()メソッドを呼んでいます。...
*** JFrameを継承するプログラミング [#j767173a]
アプリケーションで使うウィンドウを作る時の流儀の一つに、...
import javax.swing.JFrame;
public class SimpleWindow extends JFrame {
public void initialize () {
this.setTitle("私が作った最初の窓");
this.setSize(200,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main (String argv[]) {
SimpleWindow sw = new SimpleWindow();
sw.initialize();
}
}
このプログラムでは、JFrameを継承して、サブクラスとしてSim...
なので、SimpleWindowのインスタンスは、JFrameの機能を全て...
別のプログラムからSimpleWindowのインスタンスを作って表示...
mainでは、自分自身のインスタンスを作って、それへの参照をs...
そしてinitialize()というインスタンスメソッドを呼んでいま...
initialize()は今の所SimpleWindowで新たに定義した唯一のメ...
その名の通り、自分自身の初期化を行うつもりで命名しました。
コンストラクタとして実装しても良いのですが、結構複雑な仕...
別のメソッドにしました。ちなみに、他のオブジェクト指向言...
newした後に、init()とかinitialize()とかのメソッドを呼ぶ方...
ここではそれを真似しました。
initialize()の中で、ウィンドウのタイトルを決めて、サイズ...
***ラベルを表示するウィンドウ [#dc55da2c]
このままではウィンドウが空っぽなので、文字を表示してみま...
文字を表示するクラスにJLabelがあります。その名の通りラベ...
以下のリンクからJLabelクラスを選択して、何ができるかざっ...
https://docs.oracle.com/javase/jp/8/docs/api/index.html
基本的な使い方は以下です。まずは、インスタンスを作ります...
JLabel label = new JLabel("Hello!");
ところで、JFrameで作ったインスタンスは、Containerというク...
Container content = this.getContentPane();
で、自分自身のコンテントペーンを返してくれます。
これに対して、上記で作ったラベルインスタンスをaddすること...
content.add(label);
上記の、継承を使ったプログラムによるウィンドウの中に、
Hello!という文字を出してみよう。
上で紹介した3行を、initialize()メソッドに加えれば文字を...
解答例:
import javax.swing.*;
import java.awt.*;
public class SimpleWindow extends JFrame {
public void initialize () {
this.setTitle("私が作った最初の窓");
JLabel label = new JLabel("Hello!");
Container content = this.getContentPane();
content.add(label);
this.setSize(200,100);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String argv[]) {
SimpleWindow sw = new SimpleWindow();
sw.initialize();
}
}
コンテンツの大きさに合わせてウィンドウサイズを変更する機...
上記のプログラムではsetSize()で変更していますが、これの代...
this.pack();
というメソッドを呼び出してみましょう。以下のようになるは...
http://gyazo.com/c6efe47de19436f7564660377fe8b98c.png
解答例:
import javax.swing.*;
import java.awt.*;
public class SimpleWindow extends JFrame {
public void initialize () {
this.setTitle("私が作った最初の窓");
JLabel label = new JLabel("Hello!");
Container content = this.getContentPane();
content.add(label);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String argv[]) {
SimpleWindow sw = new SimpleWindow();
sw.initialize();
}
}
***ボタンを1個表示するウィンドウ [#ied43afe]
今度はウィンドウにボタンを表示してみましょう。
ボタンなので、多分JButtonというクラスがありそうです。
以下から探して、何ができるかざっと見ておきましょう。
https://docs.oracle.com/javase/jp/8/docs/api/index.html
上記のプログラムのJLabelのところをJButtonにすればだいたい...
解答例:
import javax.swing.*;
import java.awt.*;
public class SimpleWindow extends JFrame {
public void initialize () {
this.setTitle("私が作った最初の窓");
JButton button = new JButton("Hello!");
Container content = this.getContentPane();
content.add(button);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String argv[]) {
SimpleWindow sw = new SimpleWindow();
sw.initialize();
}
}
//http://is.ocha.ac.jp/~siio/index.php?plugin=attach&pcmd...
//ここまで
***ボタンを2個表示するウィンドウ [#cb6cf696]
上のプログラムのように、
getContentPane()で得られたContainerに直接ボタンを貼付ける...
しかし、貼付けられるのは一つのボタンだけのようです。
2個以上のボタンを貼り付けるためには、JPanel(パネル、板...
これに複数のボタンを貼り付け(addする)、
そのパネルとJFrameのcontentに貼り付けます。
こんな感じのイメージです。
http://gyazo.com/03c28df2419065241b8736b7b69d7fd3.png
2個のボタンを出してみましょう。
手順としては、
+JPanelのインスタンスを作る(パネル)
+JButtonのインスタンスを2個作る(ボタン)
+パネルにボタンをadd()する
+JFrameのContent Paneを取り寄せる
+Content Paneにパネルをadd()する
です。(順番は多少前後しても構いません)
http://gyazo.com/4c3086ae9b6b5434d2ea741369f731c5.png
解答例:
import javax.swing.*;
import java.awt.*;
public class SimpleButton extends JFrame {
public void initialize () {
this.setTitle("私が作った最初の窓");
JPanel panel = new JPanel();
JButton button1 = new JButton("button1");
JButton button2 = new JButton("button2");
panel.add(button1);
panel.add(button2);
Container container = this.getContentPane();
container.add(panel);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String argv[]) {
SimpleButton sw = new SimpleButton();
sw.initialize();
}
}
***イベントハンドラー [#pdede994]
これからがGUIプログラミングの重要なところです。
GUIプログラミングでは、ユーザがマウスをクリックしたり、ボ...
現在のプログラムでは,ボタンを押しても何もおこりません.
ボタンが押されたイベントに対応するイベントハンドラーが無...
ボタンが押されたイベントを受け取るためには,
+Action Listenerをimplementしたクラスを作る
+そのインスタンスを作る
+これをボタンにaddActionListener()で登録する
必要があります.このインスタンスが、イベントを受け取るイ...
上の、ボタンが2つあるプログラムで、button1が押された時に...
ボタンのイベントを受け取るインスタンスは、新しく作成して...
ここではSimpleWindowから作ったインスタンスでイベントを受...
現在、SimpleWindowはJFrameを継承していますが、これに加え...
Action Listenerをインプレメントすることは、
Action Listenerが持っているメソッドを全て用意していますと...
この場合、そのメソッドは、actionPerformed()というメソッド...
なので、これを用意します。そこではHelloと表示することにし...
さらに、button1のAction Listenerとして、Simple Windowのイ...
これは、button1にアクションが発生したら、こちらのインスタ...
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleButton extends JFrame implements Acti...
public void initialize () {
this.setTitle("私が作った最初の窓");
JPanel panel = new JPanel();
JButton button1 = new JButton("button1");
JButton button2 = new JButton("button2");
button1.addActionListener(this);
panel.add(button1);
panel.add(button2);
Container container = this.getContentPane();
container.add(panel);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed (ActionEvent e) {
System.out.println("Hello");
}
public static void main(String argv[]) {
SimpleButton sw = new SimpleButton();
sw.initialize();
}
}
これで、button1を押した時にHelloと表示されるようになりま...
button2を押しても、何もおきません。Action Listenerが登録...
演習:button2のAction Listenerとしても、自分自身を登録し...
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleButton extends JFrame implements Acti...
public void initialize () {
this.setTitle("私が作った最初の窓");
JPanel panel = new JPanel();
JButton button1 = new JButton("button1");
JButton button2 = new JButton("button2");
button1.addActionListener(this);
button2.addActionListener(this);
panel.add(button1);
panel.add(button2);
Container container = this.getContentPane();
container.add(panel);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed (ActionEvent e) {
System.out.println("Hello");
}
public static void main(String argv[]) {
SimpleButton sw = new SimpleButton();
sw.initialize();
}
}
この結果、button1でもbutton2でも、どちらも押されればHello...
***Actionの識別 [#s45f3f97]
button1を押した時はHelloと表示され、button2を押した時はGo...
http://gyazo.com/67d27d0588f4dd5d11410e1107165994.png
ボタンごとに違うインスタンスをadd Action Listenerで追加す...
今回の例のように同じインスタンス(ここではthis)をリスナ...
このメソッドで受け取る引数はActio Eventのインスタンスです。
このインスタンスは、発生したイベントの情報を持っています。
Action Eventにはどういうインスタンス変数・メソッドがある...
https://docs.oracle.com/javase/jp/8/docs/api/index.html
今回は、この中のget Source()メソッドを使いましょう。
このメソッドで、イベントを発生したインスタンスがわかりま...
正確には、イベントを発生したインスタンスへの参照がわかり...
なので、それがbutton1だったのか、button2だったのかをif文...
その結果、HelloかGoodbyeを表示すれば良いです。
ただし、今のプログラムでは、変数button1, button2はinitial...
ヒント(最初の6行です)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleButton extends JFrame implements Acti...
JButton button1, button2;
public void initialize () {
演習:このヒントを元に、button1を押した時はHelloと表示さ...
解答例:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleButton extends JFrame implements Acti...
JButton button1, button2;
public void initialize () {
this.setTitle("私が作った最初の窓");
JPanel panel = new JPanel();
button1 = new JButton("button1");
button2 = new JButton("button2");
button1.addActionListener(this);
button2.addActionListener(this);
panel.add(button1);
panel.add(button2);
Container container = this.getContentPane();
container.add(panel);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed (ActionEvent e) {
if(e.getSource()==button1)
System.out.println("Hello");
else
System.out.println("Goodbye");
}
public static void main(String argv[]) {
SimpleButton sw = new SimpleButton();
sw.initialize();
}
}
ここではボタンを区別するために、インスタンス(への参照)...
一つは、ボタンのテキスト(ボタンの上に表示されている文字...
ボタンのテキストは、get Text()メソッドで入手できます。
以下のように変更すると、ボタンのテキストが表示されるよう...
ボタンに、HelloとGoodbyeを表示しておけば、それらが表示さ...
ボタンのテキストを文字列比較して、処理を変えることも可能...
public void actionPerformed(ActionEvent e){
System.out.println(((JButton)e.getSource...
}
もう一つは、ボタンにコマンドを書く方法です。
ボタンにsetActionCommand(String)を定義しておくと、getActi...
例えば、
button1.setActionCommand("hello");
としておけば、actionPerformedの中で
e.getActionCommand();
で文字列を得られます。なので、例えば、
public void actionPerformed(ActionEvent e){
System.out.println(e.getActionCommand());
}
でコマンド部分を印刷できます。コマンドを文字列比較して、...
//***宿題:プログラム12.4 [#sb6fece9]
//***プログラム12.4をやってください。 [#k14ed280]
//***演習12.2(改) [#q3f681b0]
***ボタンのレイアウト [#v426213f]
#ref(5buttons.png)
以下のプログラムで5個のボタンをレイアウトできます。
パネルに、Border Layourのインスタンスを設定しています。
また、パネルにaddする時に、Border Layoutクラスのクラス変...
これで東西南北中央に配置されます。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class BorderLayoutSample extends JFrame {
public void initialize() {
this.setTitle("Simple Window");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(new JButton("WEST"),BorderLayou...
panel.add(new JButton("CENTER"),BorderLay...
panel.add(new JButton("EAST"),BorderLayou...
panel.add(new JButton("NORTH"),BorderLayo...
panel.add(new JButton("SOUTH"),BorderLayo...
Container container = this.getContentPane...
container.add(panel);
this.pack();
setDefaultCloseOperation(JFrame.EXIT_ON_C...
setVisible(true);
}
public static void main (String args[]) {
BorderLayoutSample f = new BorderLayoutSa...
f.initialize();
}
}
演習:このプログラムがボタンのイベントを処理するように変...
#ref(borderlayout.png)
ヒント:
((JButton)e.getSource()).getText()
でボタンの文字を取得できます。
解答例:
イベントハンドラーでボタンの名前を表示しています。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class BorderLayoutSample extends JFrame implement...
public void initialize() {
JButton[] button;
this.setTitle("Simple Window");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
button = new JButton[5];
panel.add(button[0]=new JButton("WEST"),B...
panel.add(button[1]=new JButton("CENTER")...
panel.add(button[2]=new JButton("EAST"),B...
panel.add(button[3]=new JButton("NORTH"),...
panel.add(button[4]=new JButton("SOUTH"),...
for(int i=0; i < button.length; i++) {
button[i].addActionListener(this);
}
Container container = this.getContentPane...
container.add(panel);
this.pack();
setDefaultCloseOperation(JFrame.EXIT_ON_C...
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
System.out.println(((JButton)e.getSource(...
}
public static void main (String args[]) {
BorderLayoutSample f = new BorderLayoutSa...
f.initialize();
}
}
解答例2:
イベントハンドラーでボタンに割り当てられたコマンドを表示...
上記の例よりは複雑ですが、コマンドを使うメリットはありま...
この例ではメリットを活かせていませんが、
コマンドを割り当てると、ボタンの名前を変更しても影響が出...
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class BorderLayoutSample extends JFrame implement...
public void initialize() {
JButton[] button;
this.setTitle("Simple Window");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
button = new JButton[5];
panel.add(button[0]=new JButton("WEST"),B...
panel.add(button[1]=new JButton("CENTER")...
panel.add(button[2]=new JButton("EAST"),B...
panel.add(button[3]=new JButton("NORTH"),...
panel.add(button[4]=new JButton("SOUTH"),...
for(int i=0; i < button.length; i++) {
button[i].addActionListener(this);
button[i].setActionCommand(button...
}
Container container = this.getContentPane...
container.add(panel);
this.pack();
setDefaultCloseOperation(JFrame.EXIT_ON_C...
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
System.out.println(e.getActionCommand());
}
public static void main (String args[]) {
BorderLayoutSample f = new BorderLayoutSa...
f.initialize();
}
}
演習:このプログラムを参考にして、
上で作った二つのボタンのプログラム、Simple Buttonに対して...
演習のヒント
bt1 = new JButton("button1");
bt2 = new JButton("button2");
panel.setLayout(new FlowLayout(FlowLayout.RIGHT));
// bt1.setActionCommand("this is b1");
// bt2.setActionCommand("this is b2");
FlowLayoutにはCENTER, LEFT, RIGHTなどの揃え方の指定があり...
panel.setLayout(new FlowLayout(FlowLayout.CENTER));
panel.setLayout(new FlowLayout(FlowLayout.LEFT));
ページ名: