- ベストアンサー
java ME MIDPにおいて
java ME MIDPにおいて Canvasクラスの public void paint(Graphics g){ g.setColor(255,255,255);} で、メインのMIDletクラスが 起動すると自動でpaintが呼ばれる仕組みが理解できません。 また、paintの引数のGraphicsクラスは String.voluOf();のStringクラスの様にインスタンス化せずに使っているクラスですか? さらに、setColoor();もstaticメソッドではないのになぜ使えるのでしょうか? 以上三点、 どういう振る舞いをしているのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> メインのMIDletクラスが > 起動すると自動でpaintが呼ばれる仕組みが理解できません。 MIDletのクラスを起動しただけではCanvasのpaint()は呼ばれませんね。DisplayクラスのsetCurrent()メソッドを呼んで、どのCanvasインスタンスを使用するかを指定しているはずです。 setCurrent()を呼んだ後、どのような仕組みでpaint()が呼ばれるのかはとりあえず理解する必要はありません。 > paintの引数のGraphicsクラスは > String.voluOf();のStringクラスの様にインスタンス化せずに使っているクラスですか? いいえ、Graphicsのインスタンスがpaint()の引数として渡されます。どこで誰がGraphicsのインスタンスを作っているのかもとりあえず理解する必要はありません。 > setColoor();もstaticメソッドではないのになぜ使えるのでしょうか? gがGraphicsのインスタンスなので、不思議でも何でもありません。
その他の回答 (1)
- salsberry
- ベストアンサー率69% (495/711)
とりあえず理解する必要がないのはなぜかと言うと、知らなくてもMIDletを書くには困らないからです。 それでも知りたいと思うのは悪いことではありませんが、どのように実装するかはMIDP仕様の守備範囲外であって、A社の携帯電話のMIDPとB社の携帯電話のMIDPとC社のMIDPエミュレータでは実装方法が異なっているかもしれません。このため、一般論としては説明しにくいです。 しかしたとえ実装が異なっていても、MIDPの仕様が守られている限り、どこかで適切なGraphicsインスタンスが作られてそれを引数にpaint()が呼ばれます。
お礼
今回midpでjavaのルールに沿っての理解をしようとした所、 不可解な振る舞いに直面し、 もしかして、javaでまだ自分が知らない基本的な振る舞いによってなされているのなら、勉強しなければと迷走し、自分には読解し難いjavadocを辿り、行き詰まっていましたのでsalsberryさんの助言で助かりました。 これで安心してまた学ぶ事が出来ます。 ありがとう御座いました。
お礼
なるほど。Canvasインスタンスを呼ぶとpaintメソッドも自動で呼ばれその引数のインスタンスも自動で作るという一連の流れがあるのですね。 因みに、理解する必要が無いというのは… 説明や理解するのが困難だからでしょうか? それとも、(例えば)OSやVM、BREW、CLDCなどのバックグラウンドでの活動によるので、 そういう仕様はjava組み込み系ではブラックボックスとして開発者は一般的に 触れるべきではないという事でしょうか?