質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

2209閲覧

actionPerformedの使い方

aoi23

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

1クリップ

投稿2018/12/11 03:40

編集2018/12/11 09:51

前提・実現したいこと

プログラミング初心者なんですが、問題のプログラムがわからなくて、とりあえず考える引っ掛かりだけでもいいので教えてほしい。

### 発生している問題・ 2つのテキストフィールドにラベルを用意して,左のテキストフィールドに入力された文字列を,右のテキストフィールドに入力された数だけ描くプログラムを作成しています.またテキストフィールドの横に「赤」と表示されているボタンを置き、そのボタンを押すことで赤色の文字を描写するプログラムを作成しているのですが、特にわからないのが、ボタンとテキストフィールドを関連させてエンターキーを押(actionPerformed)の記載がわからなさすぎて困っています。

該当のソースコード

import java.awt.*; import java.applet.*; import java.awt.event.*; public class practice extends Applet implements ActionListener{ int size = 30; Button redButton, ; public void init(){ yellowButton = new Button("赤"); yellowButton.addActionListener(this); add(yellowButton); } TextField mozi, hyouzi; public void init(){ add(new Label("文字列")); mozi = new TextField("", 4); mozi.addActionListener(this); add(mozi); add(new Label("表字数")); hyouzi = new TextField("", 4); add(hyouzi); } public void } TextField mozi, hyouzi; public void init(){ add(new Label("文字列")); mozi = new TextField("", 4); mozi.addActionListener(this); add(mozi); add(new Label("表字数")); hyouzi = new TextField("", 4); add(hyouzi); } public void actionPerformed(ActionEvent e){ //(5) } } ### 試したこと 僕はプログラミングの学習を始めて一ヶ月の初心者で、とりあえずテキストに書いてあることは基本的に覚えこの問題の望んだんですがほとんどわかりませんでした、、 ### 補足情報(FW/ツールのバージョンなど) ほとんど独学で学習しているのですが、正直どうやって勉強すればいいか困っています。もし回答者様の中でわかりやすい初心者向けのテキストや動画サイトなどご存知あれば教えてほしいです。
BluOxy👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2018/12/11 03:44

「プログラミング初心者」とのことですがjavaはマストな要件ですか?初心者が最初に触るにはハードルが高いような気がします、実際に1週間溶けていないようですし別の言語で学習したほうが効果が高いと思いますが
m.ts10806

2018/12/11 03:48

(質問は編集できます)タイトルには要件を書いてください。このタイトルだと質問したい要件が何も含まれていません。「初心者」も要件とは違うものなので「初心者アイコン」をつけた質問にしてください。コードはマークダウンのcode機能を利用してください。
m.ts10806

2018/12/11 03:48

「勉強方法」については他にも同様の質問が結構な頻度であがっています。同じ回答をすることになると意味がないので過去質問を洗ってください。
m.ts10806

2018/12/11 03:49

「Java」と「JavaScript」は全く違うものですのでそのあたりは認識問題ないでしょうか。あと「挫折」って簡単に使わない方が良いです。これくらい「挫折」と言っていたらたぶん何もできません。
Lhankor_Mhy

2018/12/11 03:51

とりあえず、javascript は関係ないので、タグを消してください。
aoi23

2018/12/11 08:03

yambejpさんコメントありがとうございます。学校の練習問題なのでjavaはマスト要件なんです、、
aoi23

2018/12/11 08:07

mts10806さんコメントありがとうございます。初めての投稿で不愉快に思われてること多々あると思います、すぐに修正します、申し訳ありません。勉強方法は結構な頻度で上がっているとのことなので参考にさせていただきます。
aoi23

2018/12/11 08:08

Lhankor_Mhyさんコメントありがとうございます。すぐに修正します。
m.ts10806

2018/12/11 08:17

あくまで「teratailの質問の仕方に倣いましょう」というだけで不快とか怒ってるとかではないのでご安心を。
azuapricot

2018/12/11 08:45

初めて1か月でこのレベルをやろうとしている時点でどこか間違っているような。Javaは完璧といかずとも文法はマスターしましたか?
aoi23

2018/12/11 08:51

azuapricot さんコメントありがとうございます。一応段階を踏んで基礎的な知識を学習しています。ただほとんど独学で学習しているので、知識があやふやになっているんだと思います。最近は独学に限界を感じてきたので、学校や教室に通う事も念頭においてます。
aoi23

2018/12/11 09:14

どなたか質問の編集の方法教えていただけないでしょうか(汗
aoi23

2018/12/11 09:47

kei344さんありがとうございます!
guest

回答2

0

修正依頼にあるとおり挫折してるなら別の言語をやればいいのでは?とも思いますが
気になったところを上げていきます。

extends Applet

今時Appletはほぼ動きません。Raspberry piならswingを、それ以外ならJavaFXを推薦します。

class practice

と書いてありますが、javaはキャメルケースなので

class Practice

になります。

mozi だとか yellowbutton

これは変数名ですね。不適切、とは少し違いますが
なぜyellowなの?赤なのに?だとかmozi(ローマ字)じゃなくて英語で( character だとか c )
とか思います。まあ個人で使うなら問題ない範囲です。

public void init(){ add(new Label("文字列")); mozi = new TextField("", 4); mozi.addActionListener(this); add(mozi); add(new Label("表字数")); hyouzi = new TextField("", 4); add(hyouzi); } public void }

最後の

public void}

は何でしょうか?コピーミスですか?これでは実際に動かないので回答者が困ります。

本題の

public void actionPerformed(ActionEvent e){ //(5) }

は、まだ初心者というのを考慮すれば、クラス変数で制御すればいいかと。まあ、どこからでも操作できてしまうので、慣れたら

addActionListener( new ActionListener(){});

みたいな感じで書くと、ローカル変数も使えます。

長々しく書いちゃいましたが、こんな感じです。長文失礼しました。

投稿2018/12/11 06:37

yukkuri

総合スコア624

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoi23

2018/12/11 08:56

回答ありがとうございます。一応Appletでもプログラミングは学習できるということなのでうちの学校のテキストではAppleが使われています。僕も効率悪いと思いますが、、 質問に多々ミスがあって申し訳なく思っています。すぐに修正させていただきます。 コメント参考にさせていただきます。
guest

0

ベストアンサー

ご質問へのコメントでも言及されていましたが、プログラミングを始めて1ヶ月でJavaアプレットのGUIプログラミングはちょっと敷居が高いと思われます。また、これからプログラミングを始められるのにはJavaアプレットは色々な意味でお勧めできません。とは言え「とりあえず考える引っ掛かりだけでもいいので教えてほしい」、「ボタンとテキストフィールドを関連させてエンターキーを押(actionPerformed)の記載がわからなさすぎ」とのことでしたので、その辺だけでも回答してみたいと思います。

actionPerformedはメソッド名のとおり、「アクションが実行された」時に呼ばれるもので、質問者さんが... Applet implements ActionListenerとコードに書いたことで実装しなければならなくなります。そのメソッド内でプログラマーがやりことをコードに書く訳です。「実装しなければればならない」のはActionListenerinterfaceであるからですが、今の段階ではピンとこないのではないかと。

実際にJavaアプレット用にコーディングするとなると、以下のようになります。質問者さんがあげたコードは一部でコンパイルが通らないので、ある程度意図をくみとった(つもりの)上で書き直しています。簡単なものなので全掲します。赤い文字にするなど、質問者さんが最終的にやりたいプログラムはなっていませんので、actionPerformedの使用例としてみてください。(Windows 7 での Java8 で動作確認済み) 

Java

1import java.applet.Applet; 2import java.awt.*; 3import java.awt.event.*; 4 5/* 6<applet code="AppletTest1.class" width="600" height="100"> 7</applet> 8*/ 9 10public class AppletTest1 extends Applet implements ActionListener { 11 12 /* 文字列 */ 13 TextField mozi = null; 14 15 /* 表示数 */ 16 TextField hyouzi = null; 17 18 /* 結果 */ 19 TextField kekka = null; 20 21 public void init() { 22 23 Button redButton = new Button("赤"); 24 25 // "赤"ボタンでのアクション(クリック)実行時にthis.actionPerformed()を呼ぶようにする。 26 redButton.addActionListener(this); 27 add(redButton); 28 29 add(new Label("文字列")); 30 mozi = new TextField("", 4); 31 32 // "文字列"TextFieldでのアクション(Enterキー押下)実行時にthis.actionPerformed()を呼ぶようにする。 33 mozi.addActionListener(this); 34 add(mozi); 35 36 add(new Label("表示数")); 37 hyouzi = new TextField("", 4); 38 39 // "表示数" TextFieldでのアクション(Enterキー押下)実行時に呼ぶようにする。 40 // this.actionPerformedは使わない例 41 hyouzi.addActionListener(new ActionListener() { 42 public void actionPerformed(ActionEvent e) { 43 kekka.setText("表示数テキストフィールドでENTERが押された."); 44 } 45 }); 46 add(hyouzi); 47 48 add(new Label("結果")); 49 kekka = new TextField("", 20); 50 add(kekka); 51 } 52 53 // アクション実行時に呼ばれるメソッド 54 // ※AppletTest1クラスはinterfaceであるActionListenerをimplementsしなければならない 55 public void actionPerformed(ActionEvent e) { 56 String s = ""; 57 58 // 1. どのオブジェクトでアクションが発生したか 59 if (e.getSource() instanceof Button) { 60 // "赤" ボタンでイベント発生 61 s = "ボタン/" + s; 62 63 } else if (e.getSource() instanceof TextField) { 64 // "文字列" テキストフィールドでイベント発生 65 s = "テキストフィールド/" + s; 66 } 67 68 // 2. "文字列"TextFieldと" "表示数"TextFieldの文字列を連結 69 s = s + mozi.getText() + hyouzi.getText(); 70 71 // 3. 結果に表示 72 kekka.setText(s); 73 } 74} 75

このコードで、は「赤」ボタンを押したとき、「文字列」および「表示数」テキストフィールドでENTERキーを押したときにそれぞれでactionPerformedが呼び出されます。以下は「赤」ボタンを押した例です。
イメージ説明

もし回答者様の中でわかりやすい初心者向けのテキストや動画サイトなどご存知あれば教えてほしいです。

初心者さん向けの勉強方法などはこのteratailはじめ他のサイトでも有益な記事がたびたび挙がっていると思うので多くは述べませんが、少なくとも初心者さんがプログラミングの基本的な部分を学ぶにはJavaアプレットを含むGUIはそれぞれで特有な事情があり、勉強には不向きかな、とは思います。チュートリアルのようなものを修めた後では、例えばAt CoderやAOL(Aizu Online Judge)のような競技プログラミング系の簡単な問題に取り組むと達成感も得られ、他のユーザーさんのコードも確認でき、また自分の実績も積み上げていけるので良いのではないかと思います。真っ先に自分で造りたいプログラムがあればその限りではありませんが。

投稿2018/12/11 08:40

編集2018/12/11 09:18
dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoi23

2018/12/11 09:04

とても詳しく回答していただきありがとうございます。明日のプログラミング学習の時に回答者様のプログラムを参考にさせていただきたいと思います。 正直先生や質問サイトに相談しても、厳しい言葉ばっかりだったので丁寧な説明とても助かります、、しかし自分でもこのレベルの問題、すぐに打てるよう学習に励みたいと思います。 競技プログラミング系というのは初めて聞いたので調べてみます、情報ありがとうございます。
dodox86

2018/12/11 09:13

正直、コード全掲載はよくないかと思いましたが、ActionListener.actionPerformed のような使い方と動作は最初はなかなかイメージできないだろうなと思い、そのまま載せてしまいました。GUIのプログラミングで、ボタンやテキストボックスをコード上で貼り付けるようなものではよくみるパターンです。最初は分からなくても、自分で書いて「これはどういうことなのか」と考え続けるといずれイメージがつかめてくると思います。
aoi23

2018/12/11 09:23

心苦しくさせて申し訳ありません。dodox86さんのおっしゃる通り自分で作れるようにならないと意味がないので今後も学習を継続していこうと思います。ActionListener.actionPerformed の使い方もですが、全体的に基本がしっかりしていないと思うので、もう一回最初から学習してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問