次の様なプログラムを書きました。

class listener implements KeyListener{
String TypedKeyName;
....
}

勿論必要なmethodは全て記述しました。TypedKeyNameには入力された
キーの名前を保存します。
次に、Appletクラスを拡張し、Runnableをimplementsしたクラスを
作成して、その中でlistenerのインスタンスlis_insを作り、

addKeyListener(lis_ins);

としました。run()の中で永久ループにしてTypedKeyNameの値をpaint()にて
表示させようと思ったのですが、上手くいきません(全く更新されません)。
参考書には

addEventListener(this);

とばかり載っているのですが、ひょっとして、Componentクラスを
継承していないとリスナーには指定出来ないのでしょうか?
分かり難い質問で申し訳ありません。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

paintの方には問題がない(本当にKeyEventが発生していない)と仮定して書いてみます。



Appletにフォーカスは当たっているでしょうか?
すべてのバージョンでそうなのか分かりませんが、うちのappletviewerで動かした場合、AppletがrequestFocusしてやらないとフォーカスが来ないようです。
IE5上で実行すると、最初からフォーカスが当たっているみたいですが。

Componentクラスを継承していないとリスナーには指定出来ない、ってことはありません。
    • good
    • 0
この回答へのお礼

回答有難うございます。無事動かす事が出来ました。

原因は二つありました。一つはご指摘の通りFocusが当たっていなかった事。
それからもう一つの原因なんですが・・御免なさい!
実はinit()内でスレッドのインスタンスを作り、start()させるのを
忘れていました。いくらrun()を記述しようと、スレッドが動いていなければ
repaint()が呼び出されるわけがありませんでした。

こんな初歩のミスで、しかもそれに気づく事なく安易に質問してしまい、
申し訳ありませんでした。
そして改めて、親切に教えて頂いて有難うございました。

お礼日時:2001/02/16 00:31

失礼ですが、ちょっと状態がよくわからないので質問させてください。



paint()はうまくうごいているのですか?

keyEvent以外の方法でキックしてみたら期待通りに動くのでしょうか。

イベント受け取ったさきで実行するメソッドに
System.out.println("xxx");
いれてコンソール表示みてみて、
コンソールにxxxが表示されていないようなら
「キーイベントが正しくわたっていない」
xxxは表示されているならイベントの問題ではない、
ということになるとおもうのですが…
    • good
    • 0
この回答へのお礼

回答有難うございます。動かない理由は自分のつまらないミスでした。
スレッドを動かすのを忘れていたのです。全く見当違いな所に疑いを持って
いました。

System.out.println("xxx");
成る程、appletviewerを使っている場合、そうすればデバッグに
活用する事が出来ますね。目から鱗が落ちました。
改めて、有難うございました。

お礼日時:2001/02/16 00:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QVectorクラスとRunnableインターフェース

こんにちわ。
Java初心者です。
Vector クラスとrunnable インタフェースを実装したスレッドを用いたプログラムを作成中で、自分でも中身が分からなくなってきたうえにMainメソッドの位置が分からなくなってしまいました;
名前の表示が実行できるようにどなたか修正をお願いいたします。
現段階のソースは以下です。

import java.util.*;

public class NameList implements Runnable{
private Thread t = null;
private Vector list = new Vector();

public void Name(){
List<String> list = new ArrayList<String>();
list.add("Ayane");
list.add("Akiyo");
list.add("Asami");
list.add("Hanabi");
list.add("Meg");
list.add("Michiru");
list.add("Mika");
list.add("Reina");
}

public void run(){
while (true){
System.out.println(list.get(0));
try{
Thread.sleep(1000);
} catch (InterruptedException e){
break;
}
}
}

public void start(){
if(t == null){
t = new Thread(this);
t.start();
}
}
}

こんにちわ。
Java初心者です。
Vector クラスとrunnable インタフェースを実装したスレッドを用いたプログラムを作成中で、自分でも中身が分からなくなってきたうえにMainメソッドの位置が分からなくなってしまいました;
名前の表示が実行できるようにどなたか修正をお願いいたします。
現段階のソースは以下です。

import java.util.*;

public class NameList implements Runnable{
private Thread t = null;
private Vector list = new Vector();

public void Name(){
List<String> list...続きを読む

Aベストアンサー

package thread_test;

import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;


public class thread_test implements Runnable{

Vector <String> list = new Vector<String>();
Thread th = new Thread(this);
public thread_test() {
list.add("Ayane");
list.add("Akiyo");
list.add("Asami");
list.add("Hanabi");
list.add("Meg");
list.add("Michiru");
list.add("Mika");
list.add("Reina");
th.start();

}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {

new thread_test();
// TODO code application logic here
}

public void run() {

for(int i=0;i<list.size();++i){
System.out.println(list.get(i));
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(thread_test.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

}

package thread_test;

import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;


public class thread_test implements Runnable{

Vector <String> list = new Vector<String>();
Thread th = new Thread(this);
public thread_test() {
list.add("Ayane");
list.add("Akiyo");
list.add("Asami");
list.add("Hanabi");
list.add("Meg");
list.add("Michiru");
list.add("Mika");...続きを読む

QFilterReader クラスのカスタムクラス作成時に、宣言していない in.read が使える?

下記のコードに関して質問です。

このコードはコンパイル成功します。
しかし、8行目の in.read(buf,from,len) の in は生成していません。
何故コンパイル通るのしょうか?
※ちなみに、これはある書籍のサンプルからの抜粋です。

もしご存知の方いらっしゃいましたら、教えてください。






import java.io.*;

public class TagFilter extends FilterReader{

public TagFilter(Reader reader){ super(reader);}

public int read(char[] buf, int from, int len) throws IOException{
while(in.read(buf,from,len) != -1) ; /* ← この in はどこにある?
return 0;
}
}

Aベストアンサー

FilterReaderクラスから継承した、Readerを格納するフィールドです。

protected宣言されているので、サブクラスからも呼び出せます。

参考URLはFilterReaderクラスのAPI仕様です。

参考URL:http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/io/FilterReader.html

Qリスナーを別クラスで書いた時のエラーの意味と原因?

 
 今晩は。
 参考書を見ながら、リスナーを別クラスで書いてみました。

 maクラスのコンストラクタを「public void ma」にすると「maのコンストラクタが未定義」
ですというエラーが出ます。

 これはどのような意味でしょうか、よろしくお願いします。


=================================================================================

public class applet extends Applet
{
String s = "Hello" ;

public void init()
{
addMouseListener(new ma(this));
}

public void paint(Graphics g)
{
g.drawString( s , 60 , 60 ) ;
}
}



class ma extends MouseAdapter
{
applet a ;

public /*void*/ ma(applet ap)
{
a = ap ;
}

public void mouseClicked(MouseEvent e)
{
a.s = "JAVA" ;
a.repaint() ;
}
}

 
 今晩は。
 参考書を見ながら、リスナーを別クラスで書いてみました。

 maクラスのコンストラクタを「public void ma」にすると「maのコンストラクタが未定義」
ですというエラーが出ます。

 これはどのような意味でしょうか、よろしくお願いします。


=================================================================================

public class applet extends Applet
{
String s = "Hello" ;

public void init()
{
addMouseListener(new ma(this));
}

public void paint(Graphics g)
{
...続きを読む

Aベストアンサー

># これはもう少し具体的に説明して頂くとどのような意味になるのでしょうか。

これこそ、1さんのいうとおり仕様書を読んで理解してください。

簡単に言うと、すべてのクラスはObjectクラスを親に持ちます。
そのObjectクラスから継承され、許可されたすべての実装を初期で持ちます。
つまり、appletを引数にもつコンストラクタが継承されたすべての
クラスの中に存在しないということです。

Q特定のクラスを持つ
  • を非表示にする方法
  • ネットで調べまくりましたが、実現できそうなものが見つけられなかったので質問させてください。
    checkboxで指定したidとaタグに指定してあるclass名が一致しない<li>~</li>を非表示にしたいのですが、どのようにすれば実現できるでしょうか?下記の例ですと、idに"area12"が指定してある<li>~</li>を非表示にしたいです。どうぞよろしくお願いいたします。
    【例】
    <li><a href=""><label><input type="checkbox" checkd id="area10"/>鏡水</label></a></li>
    <li><a href=""><label><input type="checkbox" checkd id="area11"/>金城</label></a></li>
    <li><a href=""><label><input type="checkbox" checkd id="area12"/>三原</label></a></li>
    <a class="area10"><img src="~"/></a>
    <a class="area11"><img src="~"/></a>

    ネットで調べまくりましたが、実現できそうなものが見つけられなかったので質問させてください。
    checkboxで指定したidとaタグに指定してあるclass名が一致しない<li>~</li>を非表示にしたいのですが、どのようにすれば実現できるでしょうか?下記の例ですと、idに"area12"が指定してある<li>~</li>を非表示にしたいです。どうぞよろしくお願いいたします。
    【例】
    <li><a href=""><label><input type="checkbox" checkd id="area10"/>鏡水</label></a></li>
    <li><a href=""><label><input type="checkbox" ch...続きを読む

    Aベストアンサー

    こんにちは。
    横からですが・・・


    普通にご質問文を読むと、若干矛盾を感じながらも、
    『チェックボックスに対応する画像要素の表示/非表示を制御したい』
    というふうに推測できると思いますし、ANo2様がご回答の内容もそうなっています。

    一方で、質問文を何度も読んでみて
    >特定のクラスを持つ<li>を非表示にする方法
     (li要素にクラス設定はされてないけれど…)
    ><li><input ~~~>三原</label></li>は表示されたままでした

    などから妄想をたくましくしてみると、ひょっとすると
    『リストの各項目に対応するリンク(画像)要素が文書内に存在しない場合は、そのリストの項目を非表示にしたい』
    という意図のご質問なのでしょうか?

    ついでながら、リストの項目内のリンク要素の意味は何なのかも謎ですね。


    万一、妄想が当たっていた場合はこんな感じでしょうか?
    (jQuery等は不要です)

    <script type="text/javascript">
    window.onload = function(){
    Array.prototype.forEach.call(document.querySelectorAll("input[type=checkbox]"), function(e){
    var a = e; while(a && a.nodeName != "LI") a = a.parentNode;
    if(a && !document.querySelector("a." + e.id)) a.style.display = "none";
    });
    }
    </script>

    こんにちは。
    横からですが・・・


    普通にご質問文を読むと、若干矛盾を感じながらも、
    『チェックボックスに対応する画像要素の表示/非表示を制御したい』
    というふうに推測できると思いますし、ANo2様がご回答の内容もそうなっています。

    一方で、質問文を何度も読んでみて
    >特定のクラスを持つ<li>を非表示にする方法
     (li要素にクラス設定はされてないけれど…)
    ><li><input ~~~>三原</label></li>は表示されたままでした

    などから妄想をたくましくしてみると、ひょっとすると
    『リストの各項目に対...続きを読む

    Q
  • の数を制限

    下記のソースのように<li>タグが多数あるものを
    上から3つのみを表示させるような形にしたいのですが
    (<li></li>を上から3つのみに制限)
    どのようなスクリプトを書けば良いでしょう?

    <div id="box">
    <ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    </ul>
    </div>

    ご伝授いただけるととても助かります!

    Aベストアンサー

    表示しない場合、表示させる仕組みはいらないのですか?
    最近のブラウザならnth-childなんて疑似クラスもあるみたいですが
    (当然IEは非対応)

    <style>
    #box li{
    display:none
    }
    #box li:nth-child(1),#box li:nth-child(2),#box li:nth-child(3){
    display:list-item;
    }
    </style>
    <div id="box">
    <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
    <li>10</li>
    </ul>
    </div>


    人気Q&Aランキング

    おすすめ情報