- ベストアンサー
画面の大きさに合わせてボールを動かせたい
- java初心者が画面の大きさに合わせてボールを動かす方法を教えてください
- 現在、ボールの動く範囲は画面の大きさに関係なく固定されています
- どのようにプログラムを変更すれば画面の大きさに合わせてボールの動く範囲を調整できるのでしょうか
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
質問文のプログラムとANo.1の補足のプログラムが全く関係ありませんが、Appletを作りたかったんじゃなかったんでしょうか。 元のBallMove_1pクラスで、Runnableに加えてComponentListenerも実装してください。 その上でinit()の中でaddComponentListener(this);を実行すればいいでしょう。 再度書きますが、画面の大きさが変わったときにwidthやheightの値とオフスクリーンの大きさを更新するようにすればいいです。
その他の回答 (1)
- salsberry
- ベストアンサー率69% (495/711)
動く範囲を決めているのは、move()メソッドの中で参照されているwidthやheightの値です。しかし、widthやheightの値はinit()の中で一度セットされた後更新されることがありません。これが、アプレット起動後に画面の大きさを変えてもボールの動く範囲に反映されない理由です。 画面の大きさが変わったときにwidthやheightの値を更新するようにすればいいです。ComponentListenerのcomponentResized()あたりを使えばいいと思いますが、初心者にはハードルが少し高いかな。 width・heightの値だけではなく、オフスクリーンの大きさも同時に変えてください。
補足
回答有難う御座います。 何とかWebの情報を参考にして以下のようなコードは書けたのですが、 「System.out.println("componentResized");」は表示されたのですが、 Windowには「g.drawOval( 20 , 20 , 50 , 50) ;」というのが書けません。 どこがどう間違っているのでしょうか、宜しくお願いします。 =================================================================== import java.awt.Color; import java.awt.Container; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import javax.swing.JFrame; public class Resized4 extends JFrame implements ComponentListener { public static void main(String[] args) { Resized4 frame = new Resized4(); frame.addComponentListener(new Resized4()); Container cnp = frame.getContentPane(); cnp.setBackground(Color.magenta) ; frame.setTitle("サンプル") ; frame.setSize(640, 480) ; frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ; frame.setVisible(true); } public void componentHidden(ComponentEvent e) { System.out.println("componentHiddened"); } public void componentMoved(ComponentEvent e) { System.out.println("componentMoved"); } public void componentResized(ComponentEvent e) { // g = getGraphics(); // g.drawOval( 20 , 20 , 50 , 50) ; System.out.println("componentResized"); } public void componentShown(ComponentEvent e) {} }
お礼
salsberry さん、ありがとう御座いました。