Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

初心者です

ウインドウでアクションイベントを処理してウィンドウ内の文字を書き換えたいのですがエラーが出ますなぜですか?

package jp.tuyano.eclipsbook;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Uinndou5 extends JFrame{
    private static final long serialVersionUID = 1L;
    
    JButton b1;

    public Uinndou5(){
        this.setSize(300,200);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        b1 = new JButton("Clik");
        MyJButtonActionAdapter ba = new MyJButtonActionAdapter();
        ba.Uinndou5 = this;
        b1.addActionListener(ba);
        this.add(b1,BorderLayout.CENTER);
        this.setVisible(true);
        
    }

    public static void main(String[] args){
        new Uinndou5();
    }
}

class MyJButtonActionAdapter implements 
//上の MyJButtonActionAdapter というところに
(型 MyJButtonActionAdapter はすでに定義されています)と出ますなぜですか理由が知りたいです。
ActionListener{
    Uinndou5 Uinndou5;

    public void actionPerformed(ActionEvent ev){
        Uinndou5.b1.setText("you clicked.");
    }
}

わかる方は御教受いただけると幸いです。

5

回答

94392

閲覧

5件の回答

評価

0

なんでわざわざ「初心者です」なんて書くんだろうねえ。

エラーが出たら、そのエラーを検索してみるんだよ。
つか、まずは初歩からやるべきだよなあ。

評価

0

私はコードを見て気になったことを。

MyJButtonActionAdapterクラスのimplementsの後ろに何も書かれていないように見えるのですが、それはただのコピペミスですよね?

また、そこのクラスで
Uinndou5 Uinndou5;
という宣言がありますが、せめて先頭の大文字を小文字に変えるなど、クラス名と同じ変数名を用いるのはやめた方がいいと思います。
JavaSE-1.8で同じようなコード書いてみてエラーや警告は出ませんでしたし、Javaのほうはもしかしたら質問者さんの意図するように解釈してくれるようにできているかもしれませんが、たとえば
Uinndou5.b1.setText("you clicked.");
のUinndou5がMyJButtonActionAdapterクラスのUinndou5変数を指すのかUinndou5クラスを指すのか、少なくとも質問者さん以外の読み手にはわかりにくいかもしれません。
もしそのような書き方がしたいがためにあのような宣言をするのであれば、いっそのことUinndou5クラスのb1変数をstaticにしてしまってはどうでしょうか?
そうすればあのような宣言をすることなくそのような書き方ができますよ。
staticを付けるとオブジェクト指向的使い方(クラスのオブジェクトごとに値などを変える)というようなことができなくなりますが。

>(型 MyJButtonActionAdapter はすでに定義されています)と出ますなぜですか理由が知りたいです。

書いてある通りすでにどこかで定義しているという可能性はありませんか?
以下のページなどを読んでみると解決するかもしれません。

新規作成クラスなのに「定義済みです」といわれる - @IT
http://www.atmarkit.co.jp/fjava/javatips/147eclipse029.html

評価

0

同じパッケージに同名のpublicクラスが定義されているか
らだと思います。

ソース上のトップレベルで定義された(いいかえれば内部
クラスでない)publicクラスは同じパッケージ内の全ての
ソースから(importしなくても)見える仕様です。先頭に暗
黙的にimportされていると考えてもかまいません。
故にこういうpublicクラスと同名のクラスをソースのトッ
プレベルで定義しようとすると「すでに定義されていま
す」というコンパイルエラーになります。

内部クラスとして定義するか無名クラスを使うとよいと思
います。ソース内でしか使えない非publicクラスはトップ
レベルで定義するより内部クラスとして定義するほうが自
分などは好みです。

閑話休題・・・
自分は「初心者です」からそれほど悪い印象は受けませ
ん。「初歩的な質問ですみませんが回答よろしくお願いし
ます」などと自分でも言いそうな気がします。
それより「事前に調べる」「疑問点を明確にする」「情報
が抜けていないか考える」などのほうを気にします。

評価

0

余談ですが…
回答内容に"初心者です。"は、特に何も思いませんが、題名に"初心者です"だけはマナー違反です。
ガイドラインには用件を簡潔に記載しましょう。となっています。

評価

0

>ガイドラインには用件を簡潔に記載しましょう。となってい
ます。

マナー違反は避けないといけませんね。
失礼しました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。