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

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

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

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

Q&A

解決済

1回答

1335閲覧

javaにおけるkeylistener classの適応について

datuota00

総合スコア20

Java

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

0グッド

0クリップ

投稿2016/12/18 11:13

###問題点
前回までの質問同様のプログラムの問題です。
下記のプログラムですが、ご回答いただいた方の指摘を入れてみたところあと一歩のところでコンパイルできません

View5をKeyListenerに変換できません p.addKeyListener(this);

これはJPanelクラスであるpにはKeyListenerが適応できないということでしょうか?
それともaddKeyListenerがついた変数が被っているからエラーが出てしまっているのでしょうか?
ご回答どうぞよろしくおねがいいたします。

###ソースコード

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowAdapter; import javax.swing.Timer; import java.awt.*; import java.awt.geom.Ellipse2D; import javax.swing.*; import java.util.*; import java.applet.*; import java.awt.event.KeyListener; import java.awt.event.KeyEvent; import java.awt.event.InputEvent; class RoundButton extends JButton { protected Shape shape; protected Shape base; public RoundButton(Icon icon){ super(icon); setModel(new DefaultButtonModel()); setBackground(Color.BLACK); setContentAreaFilled(false); setFocusPainted(false); setBorderPainted(false); setAlignmentY(Component.TOP_ALIGNMENT); initShape(); } protected void initShape(){ if(!getBounds().equals(base)){ Dimension s = getPreferredSize(); base = getBounds(); shape = new Ellipse2D.Float(0,0,s.width,s.height); } } @Override public Dimension getPreferredSize(){ Icon icon = getIcon(); Insets i = getInsets(); int iw = Math.max(icon.getIconWidth(), icon.getIconHeight()); return new Dimension(iw+i.right+i.left,iw+i.top+i.bottom); } @Override public boolean contains(int x,int y){ initShape(); return super.contains(x,y); } } //------------------------------------------------------ class Controller extends WindowAdapter implements KeyListener { private Model model; private View5 view; Timer timer; RoundButton flushButton; Color defaultColor = Color.BLACK; Color flushColor = Color.RED; boolean flushFlag; public Controller(Model model){ this.model=model; timer = new Timer(1000,this::expired); timer.setRepeats(true); } public void setView(View5 view) { this.view = view; } public void keyTyped(KeyEvent actionEvent){ char c= actionEvent.getKeyChar(); RoundButton button = null; switch(c){ case'a': model.snea1();button = view.snea1; break; case'q': model.symbal2();button = view.symbal2; break; case'f': model.tam1();button = view.tam1; break; case'g': model.tam2();button = view.tam2; break; case'h': model.tam3();button = view.tam3; break; case'b': model.bass();button = view.bass; break; case'p': model.crush();button = view.crush; break; case'l': model.hihat();button = view.hihat; break; } if (button != null) { flushButton(button); } } public void keyPressed(KeyEvent actionEvent){ } public void keyReleased(KeyEvent actionEvent){ } void expired(ActionEvent dummy) { flushFlag = !flushFlag; flushButton.setBackground(flushFlag ? flushColor : defaultColor); flushButton.repaint(); } public void flushButton(RoundButton button) { timer.stop(); if (flushButton != null) { flushButton.setBackground(defaultColor); flushButton.repaint(); } flushButton = button; timer.start(); flushFlag = false; expired(null); } } //---------------------------------------------------------------------- class Model extends Observable{ private AudioClip pong; public void snea1(){ pong = Applet.newAudioClip(getClass().getResource("se_maoudamashii_instruments_drum1_snare.wav")); pong.play(); } public void symbal2(){ pong = Applet.newAudioClip(getClass().getResource("se_maoudamashii_instruments_drum2_cymbal.wav")); pong.play(); } public void tam1(){ pong = Applet.newAudioClip(getClass().getResource("se_maoudamashii_instruments_drum1_tom1.wav")); pong.play(); } public void tam2(){ pong = Applet.newAudioClip(getClass().getResource("se_maoudamashii_instruments_drum1_tom2.wav")); pong.play(); } public void tam3(){ pong = Applet.newAudioClip(getClass().getResource("se_maoudamashii_instruments_drum1_tom3.wav")); pong.play(); } public void bass(){ pong = Applet.newAudioClip(getClass().getResource("se_maoudamashii_instruments_drum2_bassdrum.wav")); pong.play(); } public void crush(){ pong = Applet.newAudioClip(getClass().getResource("se_maoudamashii_instruments_drum2_cymbal.wav")); pong.play(); } public void hihat(){ pong = Applet.newAudioClip(getClass().getResource("se_maoudamashii_instruments_drum1_hat.wav")); pong.play(); } } //--------------------------------------------------------- class View5 extends JFrame{ RoundButton snea1; RoundButton symbal2; RoundButton tam1; RoundButton tam2; RoundButton tam3; RoundButton bass; RoundButton crush; RoundButton hihat; public View5(Controller aController){ this.setSize(750,440); JPanel p =new JPanel(); p.setLayout(null); ImageIcon icon1 = new ImageIcon("./s_Snea.png"); snea1=new RoundButton(icon1); snea1.setBounds(50, 250, 150, 150); ImageIcon icon2 = new ImageIcon("./s_Cymbal.png"); symbal2=new RoundButton(icon2); symbal2.setBounds(0, 0, 180, 180); ImageIcon icon3 = new ImageIcon("./s_Tam.png"); tam1=new RoundButton(icon3); tam1.setBounds(180, 100, 130,130); ImageIcon icon4 = new ImageIcon("./s_Tam2.png"); tam2=new RoundButton(icon4); tam2.setBounds(310, 50, 130,130); ImageIcon icon5 = new ImageIcon("./s_Tam3.png"); tam3=new RoundButton(icon5); tam3.setBounds(440, 100, 130, 130); ImageIcon icon6 = new ImageIcon("./s_Bass.png"); bass=new RoundButton(icon6); bass.setBounds(285, 230, 180, 180); ImageIcon icon7 = new ImageIcon("./s_Crush.png"); crush=new RoundButton(icon7); crush.setBounds(570, 0, 180, 180); ImageIcon icon8 = new ImageIcon("./s_Ride.png"); hihat=new RoundButton(icon8); hihat.setBounds(500, 230, 180, 180); p.setOpaque(false); snea1.addKeyListener(aController); symbal2.addKeyListener(aController); tam1.addKeyListener(aController); tam2.addKeyListener(aController); tam3.addKeyListener(aController); bass.addKeyListener(aController); crush.addKeyListener(aController); hihat.addKeyListener(aController); snea1.setActionCommand("snea1"); symbal2.setActionCommand("symbal2"); tam1.setActionCommand("tam1"); tam2.setActionCommand("tam2"); tam3.setActionCommand("tam3"); bass.setActionCommand("bass"); crush.setActionCommand("crush"); hihat.setActionCommand("hihat"); p.add(snea1); p.add(symbal2); p.add(tam1); p.add(tam2); p.add(tam3); p.add(bass); p.add(crush); p.add(hihat); p.setFocusable(true); p.addKeyListener(aController); this.addWindowListener(aController); getContentPane().add(p, BorderLayout.CENTER); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args){ new View5(new Controller(new Model())); } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

前回の回答に間違いがありました。申し訳ありません。
KeyListenerを実装していないクラスのインスタンス(View5のthis)をaddKeyListenerの引数(KeyListenerのインスタンスでなければならない)に指定したのがエラーの原因です。

java

1public View5(Controller aController){ 2 ... 3 // ContentPaneであるJPanelでキーイベントを受けられるようにしておく(必ずしも必要ない) 4 p.addKeyListener(this); // 誤り 5 p.addKeyListener(aController); // こちらが正しい 6}

本質問のコード上は既に正しく修正されているように見えます。

投稿2016/12/18 12:40

編集2016/12/18 12:52
KSwordOfHaste

総合スコア18392

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問