• 締切済み

DoJa5.0 キャンバスの中にパネルは埋め込めますか?

こんにちは!iアプリを製作している初心者です。 キャンバスとパネルを同時に使ったアプリを作りたいのですが、うまくいきません…。リストボックスのパネルをキャンバスに表示しようと思っています。 私が作ったソースコードの問題の部分を書いたので、どなたかご指導をお願いします(>△<) (1)MainPage.java import com.nttdocomo.ui.*; public class MainPage extends IApplication { //アプリの開始 public void start() { MainCanvas canvas=new MainCanvas(); Display.setCurrent(canvas); canvas.exe(); } } (2)MainCanvas.java import com.nttdocomo.ui.*; class MainCanvas extends Canvas { Graphics g=getGraphics(); public MainCanvas() { while(true) { //画面の描画 g.lock(); ~省略~ g.unlock(true); } MainPanel pl =new MainPanel(); Display.setCurrent(pl); } //描画 public void paint(Graphics g) {} } (3)MainPanel.java import com.nttdocomo.ui.*; class MainPanel extends Panel { ListBox lb1,lb2,lb3,lb4; //リストボックス public MainPanel() { //リストボックス作成 lb1 = new ListBox(ListBox.SINGLE_SELECT); lb1.append("選択1"); add(lb1); ~省略~ lb4 = new ListBox(ListBox.SINGLE_SELECT); lb4.append("選択4"); add(lb4); } } このように、(2)のMainCanvas.javaに(3)のMainPanel.javaをいったん埋め込んで、最終的に(1)のMainPage.javaでまとめて表示しようと思っています。ですが、(2)のMainCanvas.javaのMainPanel pl =new MainPanel();Display.setCurrent(pl);の部分でエラーが出て、読み込んでくれません…(;△;)何がおかしいのでしょうか?それから、今後はリストボックスにコンポーネントリスナーも付けようと思っています。

  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

noname#94983
noname#94983
回答No.1

>エラーが出て、読み込んでくれません これは、どういうエラーなのか。エラーが発生した場合は、ただ「エラーが出た」ではなくて、表示されたエラーメッセージも掲載してほしい。ちなみに、Display.setCurrentで表示のCanvasやPanelを切り替えるのは普通の操作であって、これでCanvasからPanelに切り替えること自体は問題ない。だから、どこかで引っかかっているのだろう。 ちょっと気になったのだが、もしやCanvasのコンストラクタ内でsetCurrentして表示を切り替えたりしてないだろうか。Display.setCurrentによる切り替えは、コンストラクタが終了し、idle状態に戻ってからでないとうまくいかないのではないか。たとえば、IApplication側でMainCanvasとMainPanelのインスタンスをフィールドとして保管し、これを必要に応じてsetCurrentする、というような仕組みにするのが一般的な気がする。

pocomin
質問者

補足

回答していただき、ありがとうございます! エラーはMainCanvas.javaのMainPanel pl =new MainPanel();とMainPage.javaのMainCanvas canvas=new MainCanvas();の部分に出ていて、どちらもメッセージが「シンボルを解決できません。」です。これらの文の書き方や書く位置がちがうのでしょうか?

関連するQ&A

  • iアプリ 複数パネル切替時の変数受渡

    iアプリのプログラムについて 画面を複数のパネル、キャンバスで切り替えて使用する時、変数はどのように受け渡ししたらよいのでしょうか? 例えば import com.nttdocomo.ui.*; public class TEST extends IApplication { MainCanvas mc; MainPanel mp; public void start() { mc = new MainCanvas(); mp = new MainPanel(); Display.setCurrent(mc); } } class MainCanvas extends Canvas { int DATA_x public MainCanvas() {     ~~~~ } } class MainPanel extends Panel { public MainPanel() {     ~~~~~ ここで変数DATA_xを使用したい!     ~~~~~~ } } という感じです。

    • ベストアンサー
    • Java
  • iアプリ 複数パネル切替時の変数受渡(再度)

    すみませんが、再度質問です。 パネルを切替えると、変数が書換えられてません。 import com.nttdocomo.ui.*; public class TEST01 extends IApplication { MainCanvas mc; MainPanel mp; public void start() { mc = new MainCanvas(); mp = new MainPanel(); Display.setCurrent(mc); } } class MainCanvas extends Canvas{ TEST01 app; int data; public MainCanvas() { data=1; //----- data=1 Graphics g=getGraphics(); app = (TEST01)IApplication.getCurrentApp(); } public void paint(Graphics g) { data=2; // ここでdataを書換えてるのに・・・・ g.drawString("data="+data,100,100); g.drawString("セレクトキーで画面切替",50,200); } public void processEvent(int type, int param) { if (type == Display.KEY_PRESSED_EVENT) { if (param == Display.KEY_SOFT2) { IApplication.getCurrentApp().terminate(); } if (param == Display.KEY_SELECT) { Display.setCurrent(app.mp); } } } } class MainPanel extends Panel implements ComponentListener{ TEST01 app; Button b1; Label l1; public MainPanel() { app=(TEST01)IApplication.getCurrentApp(); l1=new Label("data="+app.mc.data); //書換えたdata=2にならないのはなぜ? b1=new Button("Push me"); add(l1); add(b1); setComponentListener(this); } public void componentAction(Component c,int type, int param){ if (c == b1 && type == BUTTON_PRESSED) Display.setCurrent(((TEST01)IApplication.getCurrentApp()).mc); } } data=1だったのをdata=2にしたのに、1のままです。

    • ベストアンサー
    • Java
  • PanelとCanvasの違いについて

    i-appliでちょっとしたアプリを作成する事になりただいま勉強中です。 初歩的な質問です。 高APIのPanelクラスと低APIのCanvasクラスの違いについて質問です。 まず、Panelにおいて、ラベルテキストの表示場所を設定するといったことはできるのでしょうか? PanelとCanvasは一緒には使用できないという事をネット上でみかけたのですが、 例を出すとCanvasにリストボックスは表示できないといったことでしょうか? Panelにgif画像を左端に表示してその同列上にテキストを表示し、下部にリストボックスを表示しようとしています。Canvasではこのような表示はできないと思いますが、かといってPanelだとCanvasのようにテキスト位置などを座標で指定するといった事が現状の知識では無理だと思うのですが、実際のところこのような場合、 どのように作成していけばいいのでしょうか?わかりにくいかもしれませんがよろしくお願い致します。

  • iアプリ 色変更

    初歩的質問ですが・・・ import com.nttdocomo.ui.*; public class TEST01 extends IApplication { public void start(){ MyCanvas mc = new MyCanvas(); Display.setCurrent(mc); } } class MyCanvas extends Canvas{ public void paint(Graphics g){ g.setColor(g.getColorOfName(g.AQUA)); g.fillRect(0,0,200,200); } } で、g.setColor(g.getColorOfName(g.AQUA))の部分で、 「 Graphics からの static メソッド getColorOfName(int) には静的にアクセスしてください。」 と、エラーがでます。 ですが、実行はできます。なぜ??

    • ベストアンサー
    • Java
  • javaでのiアプリの画面表示について

    javaでiアプリを作成したいのですが、行きずまっています。 テキストボックスとストップウォッチを画面上に両方表示させたいのですが、下のDisplay.setCurrent(p);とDisplay.setCurrent(mainWin);のどちらかしか表示されません。 ストップウォッチは、MainWin.javaが他にありますのでしっかり起動します。 どうすれば良いでしょうか? package stopwatch; import com.nttdocomo.ui.*; public class StopWatch extends IApplication implements ComponentListener { MainWindow mainWin; TextBox textbox1; TextBox textbox2; public void start() { Panel p = new Panel(); textbox1 = new TextBox("",16,2,TextBox.DISPLAY_ANY); p.add(textbox1); textbox2 = new TextBox("(未入力)",16,2, TextBox.DISPLAY_ANY); textbox2.setEditable(false); p.add(textbox2); p.setComponentListener(this); Display.setCurrent(p); mainWin = new MainWindow(); Display.setCurrent(mainWin); } public void componentAction(Component source , int type, int param) { if(type == ComponentListener.TEXT_CHANGED && source == textbox1) { textbox2.setText(textbox1.getText()); } } }

  • javaでのiアプリの画面表示について

    javaでiアプリを作成したいのですが、行きずまっています。 テキストボックスとストップウォッチを画面上に両方表示させたいのですが、下のDisplay.setCurrent(p);とDisplay.setCurrent(mainWin);のどちらかしか表示されません。 ストップウォッチは、MainWin.javaが他にありますのでしっかり起動します。 どうすれば良いでしょうか? package stopwatch; import com.nttdocomo.ui.*; public class StopWatch extends IApplication implements ComponentListener { MainWindow mainWin; TextBox textbox1; TextBox textbox2; public void start() { Panel p = new Panel(); textbox1 = new TextBox("",16,2,TextBox.DISPLAY_ANY); p.add(textbox1); textbox2 = new TextBox("(未入力)",16,2, TextBox.DISPLAY_ANY); textbox2.setEditable(false); p.add(textbox2); p.setComponentListener(this); Display.setCurrent(p); mainWin = new MainWindow(); Display.setCurrent(mainWin); } public void componentAction(Component source , int type, int param) { if(type == ComponentListener.TEXT_CHANGED && source == textbox1) { textbox2.setText(textbox1.getText()); } } }

  • private voidなメソッドはstatic コンテキストですか

    コンパイルエラーで、 「static コンテキストから参照することはできません」 と表示されます。 ソースにstaticという文字は有りません。 private voidなメソッドはstatic コンテキストですか? [Foo.java] import com.nttdocomo.ui.*; public class Foo extends IApplication {  public void start() {   Display.setCurrent(new MyPanel());  } } class MyPanel extends Panel {  private void e() {   Bar.DShow(Dialog.DIALOG_ERROR, "", "");  } } [Bar.java] import com.nttdocomo.ui.*; public class Bar {  public void DShow(int type, String title, String body) {   Dialog d = new Dialog(type, title);   d.setText(body);   d.show();  } }

    • ベストアンサー
    • Java
  • 正常にビルドされたのに起動されません

    こんにちは。 私は現在、大学の卒業制作でiアプリを作っています。 問題が発生したので、どなたかご指導をお願いいたします。 i-appli Development Kitで、 --- ADFチェック 開始 --- --- ADFチェック 終了 --- --- ADF/トラステッド動作設定チェック 開始 --- --- ADF/トラステッド動作設定チェック 終了 --- と、正常にビルドされたにも関わらず、起動ボタンを押すと、 Main :java.lang.NullPointerException MainPage4 java.lang.NullPointerException at com.nttdocomo.ui.Panel.add(+17) at MainPage4.start(+7980) com.nttdocomo.ui.Panel というメッセージが表示され、エミュレータに何も映りません…。ちなみにMainPage4はプロジェクトのタイトルです。 なぜなのでしょうか?初心者ですので、どなたか分かりやすく教えてくださるとうれしいです!よろしくお願いします!

    • ベストアンサー
    • Java
  • iアプリで複数の画面(パネル)を使いたいのですが。

    以下のコードを実行するとボタンとラベルが一緒の画面に表示されますが、ボタンを押した時に新しい画面(パネル)でラベルを表示したいのです。どのようにすれば良いのでしょうか? import com.nttdocomo.ui.*; import com.nttdocomo.io.*; public class test01 extends IApplication { public void start() { mypanel w_panel = new mypanel(); w_panel.setSoftLabel(w_panel.SOFT_KEY_1,"終了"); Display.setCurrent(w_panel); } class mypanel extends Panel implements SoftKeyListener { private Label w_label; private Button w_button; public mypanel(){ w_button = new Button("ボタン"); add(w_button); w_label = new Label("ラベル"); add(w_label); setSoftKeyListener(this); } public void softKeyReleased(int param){ if(param == this.SOFT_KEY_1){ terminate(); } } public void softKeyPressed(int param){ } } }

    • ベストアンサー
    • Java
  • IEの「explorercanvas」で作ったCANVASがスクロール

    IEの「explorercanvas」で作ったCANVASがスクロール出来ない HTML5の<canvas>要素を、擬似的に使えるようにした「explorercanvas」↓ http://code.google.com/p/explorercanvas/ ですが、これを使って<canvas>要素を<div>要素の中に配置したんですが、 親の<div>ボックスをスクロールしても、canvasがスクロールされません。 本物の<canvas>要素はちゃんと出来ます。(FirefoxとChromeで確認) 何か代替策ないでしょうか?(canvas内に再描画しろってか..) (実験したコード) <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Canvas Test</title> <style type="text/css"> </style> <!--[if IE]><script src="/jslib/excanvas.js"></script><![endif]--> </head> <body> <p>CANVAS</p> <h2 style="text-align:center">Canvas TEST By HTML5 or IE(excanvas.js)</h2> <div id="hoge" style="width;500px;overflow:scroll;border:solid 1px gray"></div> <p>イメージ</p> <div id="fuga" style="width;500px;overflow:scroll;border:solid 1px gray"></div> <script type="text/javascript"> //CANVASの場合  var container1 = document.getElementById("hoge");  var canvas = document.createElement("canvas");  canvas.width = 2000;  canvas.height = 500;  container1.appendChild(canvas);  if (typeof(G_vmlCanvasManager) != 'undefined')   canvas = G_vmlCanvasManager.initElement(this.canvas);  var ctx = canvas.getContext('2d');  var img = new Image();  img.src = "/image/mio.jpg" + "?" + new Date().getTime();   img.onload = function() {    ctx.drawImage(img,0,0,2000,500);   }  container1.scrollLeft = 500; //imgの場合  var container2 = document.getElementById("fuga");  var img2 = new Image();  img2.src = "/image/yui.jpg" + "?" + new Date().getTime();  img2.style.width="2000px";  img2.style.height="500px";  container2.appendChild(img2);  container2.scrollLeft = 500; </script> </body> </html>

専門家に質問してみよう