1

こんにちは、私のアプレットはJComboBoxと5つのJRadioButtonを使用して、アプレットに描画およびペイントしています。ボタンが選択されたときにitemStateChanged()を呼び出さない私のJRadioButtonsを除いて、現在すべてが機能します。したがって、アプレットではボタンをクリックできますが、起動しません。私のコンボボックスもitemlistenerインターフェースを使用しており、機能しますが、何を試しても、情報を送信したり起動したりするためのボタンを取得できません。

ボタンを選択するには2回クリックする必要があることに気づき、問題がその中にあることを願っています。

これは宿題の問題であり、actionperformedおよびactionlistenerを使用できる場合は、:(。itemlistenerを使用する必要があります。以下は、ラジオボタンを呼び出し、シェイプボタングループに追加し、ボタンを追加する方法の例です。コンテナc。

助けてくれてありがとう!

これを読んでいる人には申し訳ありませんが、宿題だったので、コードを維持できるかどうか100%確信が持てません。理解するのに助けが必要な場合は、私に連絡してください。

4

2 に答える 2

1

一般に、非常に多くのリスナーにアプレットクラスを使用することはお勧めできません。それは混乱を増すだけであり、あなたは今、あまりにも多くのイベントを処理する神オブジェクトを持っています。詳細については、このディスカッションを参照してください。

GUIのリスナーのネストされたクラスの利点

2番目の問題は、java.awtオブジェクトとjavax.swingオブジェクトを頻繁に混合していることです。これらのオブジェクトは、同じコンテナーに配置されたときに問題を引き起こすことが知られています。アプレットを2つのJPanelに分割してみてください。1つはawtのもの(ペイント、シェイプなど)用で、もう1つはswingのもの(ボタン、ボックスなど)用です。

ItemListenerクラスを適切に使用しているようですが、ボタンを選択するのに2回クリックする必要があることを確認したとき、これはawt/スイングのミキシング/ペイントの問題の明らかな兆候でした。

于 2011-02-23T06:01:52.030 に答える
1

あなたが投稿したコードはSSCCEではありません!

あなたの質問はItemListenerに関するものですが、なぜMouseListenerとMouseMotionListenerに関連するコードを投稿したのですか?カスタムペイントコードはあなたの問題と何の関係がありますか?

ItemListenerコードが呼び出されていないことをどのように知っていますか?System.out.println(...)ステートメントをリスナーコードに追加しましたか?最初に「appletviewer」を使用してコードをテストします。ブラウザを使用するよりも簡単です。コマンドラインから行うのは次のとおりです。

appletviewer P6.html

または、HTMLファイルを作成しなくてもアプレットをテストする方が簡単だと思います。ソースファイルの先頭に次のコード行を追加できます。

// <applet code="P6.class" width="800" height="600"></applet>

これで、コマンドから、次を使用するだけでアプレットをテストできます。

appletviewer P6.java

コードの問題は、ラジオボタンがクラス変数とローカル変数の両方として定義されていることです。クラス変数がnullであるため、ItemListenerはNullPointerExceptionを生成します。

JRadioButton jrbOval = new JRadioButton("Oval");    

する必要があります:

jrbOval = new JRadioButton("Oval");    

また、JAppletのpaint()メソッドをオーバーライドしないでください。カスタムペイントは、JPanelのpaintComponent()メソッドをオーバーライドすることによって行われます。次に、パネルをアプレットに追加します。

于 2011-02-23T06:23:45.803 に答える