ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Java質問&情報提供サイトコミュのDoJaでの質問

  • mixiチェック
  • このエントリーをはてなブックマークに追加
過去に同じような質問がなかったのではじめての書き込みですがトピ作らさせていただきました
本を参考に色々してみたのですがどうしてもエラーが消えないのです
どうすればいいでしょうか……
初心者なのでどこをどう間違ったかわからないので、是非そなたか説明していただけると嬉しいです

import com.nttdocomo.ui.*;


public class Test001 extends IApplication {

public void start() {
MyCanvas mycanvas = new MyCanvas();
mycanvas.setSoftLabel(Frame.SOFT_KEY_1,"入力");
mycanvas.setSoftLabel(Frame.SOFT_KEY_2,"end");
Display.setCurrent(mycanvas);
}
}

class MyCanvas extends Canvas {
public void paint(Graphics g){
g.clearRect(0,0,getWidth(),getHeight());
g.drawString(IMEText,30,60);
}
public void processEvent(int type, int param){
if(type==Display.KEY_RELEASED_EVENT){
if(param==Display.KEY_SOFT1){
imeOn("",TextBox.DISPLAY_ANY,TextBox.NUMBER);
} else if(param==Display.KEY_SOFT2){
IApplication.getCurrentApp().terminate();
}
}
}


public void processIMEEvent(int type,int text){
if(type==IME_COMMITTED){IMEText=text; repaint();}
}

}

↓エラー内容

C:\iDKDoJa4.0\apps\test001\src\Test001.java:22: シンボルを解決できません。
シンボル: 変数 IMEText
場所 : MyCanvas の クラス
g.drawString(IMEText,30,60);
^
C:\iDKDoJa4.0\apps\test001\src\Test001.java:36: シンボルを解決できません。
シンボル: 変数 IMEText
場所 : MyCanvas の クラス
if(type==IME_COMMITTED){IMEText=text; repaint();}

コメント(4)

IMETextが定義されてないからでしょう。
public class Test001 extends IApplication {
private static String IMEText ="";
・
・
・

とでもすればいいのでは?
早速の返答ありがとうございます
さとちゃんさんの通りにやってみたのですがまた同じエラーが出てしまいます
IMETextのところは本をほぼ写したものなので未だに一切どこが間違ってるかわかりません……
はじめまして。
たぶん解決するの大変ですよ。
軽く理由を述べますね。

前提の説明を述べます。
GraphicsクラスのdrawStringメソッドの第一引数はStringクラスとAttributedCharacterIteratorクラスのパターンがあります。

以下に前提に基づいた問題を述べます。

1.java.lang.*パッケージならばデフォルト(importで宣言していない状態)でimportされていますが、Graphicsはjava.awtパッケージです。
importに関してAttributedCharacterIteratorクラスやDisplayクラスなど抜けているところがあります。

2.IMETextがStringクラスだとして
public void processIMEEvent(int type,int text){
if(type==IME_COMMITTED){IMEText=text; repaint();}
}
の部分でint型であるtextをIMEText=textのようにStringクラスのIMETextにそのまま代入しようとしています。
これは無理です。
IntegerクラスのtoString()メソッドなどを利用して変数textをStringクラスの変数に代入できるようにする必要があります。

C:\iDKDoJa4.0\apps\test001\src\Test001.java:22: シンボルを解決できません。
シンボル: 変数 IMEText
場所 : MyCanvas の クラス
g.drawString(IMEText,30,60);
^
のエラーについてはたぶん1.が原因です。

C:\iDKDoJa4.0\apps\test001\src\Test001.java:36: シンボルを解決できません。
シンボル: 変数 IMEText
場所 : MyCanvas の クラス
if(type==IME_COMMITTED){IMEText=text; repaint();}

のエラーは、さとちゃん@haruto さんが指摘していることが原因だと思います。

もし、この問題を解くことが義務でないのならばもっと基礎の問題(j2sdkのリファレンス[http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/index.html]に載っているクラスだけをもとに作られている問題)をといていったほうが時間の無駄もなく着々と実力につながっていくと思います。

さらに、com.nttdocomo.ui.*; のパッケージに含まれるクラスのソースがないのなら初心者の方が勉強するには不適切な問題です。

自分もそこまで経験があるとは言えないので上記の理由がすべてとは言い切れませんが、基礎をしっかり理解してなおかつ利用するクラスのソースが手元にあればたいていどんな問題でも解けるようになります。

他人に言われるのはしゃくかもしれませんが、いつかこの問題が解けるといいですね。
>Flexさん

非常に詳しい説明ありがとうございます
今からこの説明を読んで必死にやってみます

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Java質問&情報提供サイト 更新情報

Java質問&情報提供サイトのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。