アプレットにテキストボックスが表示されない

このQ&Aのポイント
  • アプレットを表示させ、背景に画像を表示するプログラムを作成しましたが、テキストボックスが表示されません。
  • 背景の画像は表示されるのですが、テキストボックスが表示されない原因が分かりません。
  • Java初心者です。何故テキストボックスが表示されないのか、わかる方がいましたら教えてください。
回答を見る
  • ベストアンサー

アプレットにテキストボックスが表示されません

 こんばんは、Java初心者です、宜しくお願いします。  アプレットを表示、背景に画像を表示させ、テキストボックス に文字、数字を入力するプログラムを書きました。  背景の画像は表示されるのですが、テキストボックスは 表示されません。  何故でしょうか、原因がよく分かりません。 宜しくお願い致します。 ============================================== public class TextboxTest extends Applet { MediaTracker tracker ; Image img ; TextTest tet ; public void init() { tracker = new MediaTracker( this ) ; img = getImage( getDocumentBase() , "../a.jpg" ) ; tracker.addImage( img , 0 ) ; } public void start() { try { tracker.waitForAll(); } catch (InterruptedException e) { } } public void paint( Graphics g2 ) { g2 = getGraphics(); g2.drawImage( img , 50 , 50 , 250 , 250 , this ) ; } public void abc( ) { tet = new TextTest() ; } } //=================================================================== class TextTest extends Applet implements ActionListener { JTextField jt0 ; Double lon = 0.0 ; public void init() { setLayout( null ) ; jt0 = new JTextField( "" ) ; jt0.setBounds( 150 , 150 , 100 , 30 ) ; this.add( jt0 ) ; Button bt = new Button( "Input" ) ; bt.setFont( new Font( "SansSerif" , Font.BOLD , 20 ) ) ; Color d = new Color( 0xff00ff ); bt.setBackground( d ) ; bt.setForeground( new Color( 0.0f , 0.0f , 0.0f ) ) ; bt.setBounds( 100 , 200 , 220 , 40 ) ; bt.addActionListener( this ) ; this.add( bt ) ; } public void actionPerformed( ActionEvent ae ) { jttest(); } void jttest() { try { String str_lon = jt0.getText() ; lon = Double.parseDouble( str_lon ) ; System.out.println( "lon =" + lon ) ; } catch( Exception ee ) { } } }

  • Java
  • 回答数6
  • ありがとう数12

質問者が選んだベストアンサー

  • ベストアンサー
noname#247307
noname#247307
回答No.6

># この意味が読み返してみるとよく理解出来ないのですが、AWTでは、継承とかメソッドの上書きは >出来ると思うのですが、shylockさんの回答の内容はそのような意味ではないということでしょうか。 継承やメソッドの上書きをしてもそれが機能しない、ということです。 例えば、Buttonを継承してMyButtonというクラスを作ったとします。そこにpaintメソッドをオーバーライドし、描画をして独自の表示を作ったとしましょう。 しかし、実際にこのMyButtonを組み込んで表示しても、paintで作った独自の表示はされません。Buttonの表示のままです。paintの処理はまったく機能しないのです。 AWTのコンポーネントは、JavaではなくWindowsなどのプラットフォームにあるAPIによって描画されていますので、paintをオーバーライドし、Graphicsのメソッドを呼び出しても一切描画を行うことはできないのです。描画の部分は、すべてJava以外のところで行われるので、Javaのコードでどんなに描画をしてもすべて機能しないのです。 PanelやCanvasのように、具体的な表示が実装されていないものは、paintをオーバーライドしJavaのコードで描画を行うことができます。が、ボタンやラジオボタン、チェックボックスなどのようなGUIのコンポーネントは、すべて描画はJavaの外側で行われるため、一切干渉できないのです。

westwest_2007
質問者

お礼

 shylockさん、回答有り難うございます。  参考書には書いていない(書いてはいるけども私が理解できなていないのかも)貴重な回答有り難う 御座いました、目からウロコです。  未だ未だ勉強することが一杯有りそうですが、今後とも宜しくお願いします。  

その他の回答 (5)

noname#247307
noname#247307
回答No.5

># ところで、Eclipse(Ver3.7)を使ってjavaのコードを書いていますが、Eclipseからライブラリを参照することは出来るのでしょうか。 これは、どういう意味でしょうか。システムライブラリ(Javaに最初からついてくるライブラリ)であれば、そのまま使えるはずですよ。Eclipseのプロジェクトが表示されているところに「JREシステム・ライブラリー」というような項目が表示されているはずです。これがライブラリの参照です。AWTやSwingなどはこれにより使える状態となっています。 それ以外のライブラリは、ライブラリのJarファイルをプロジェクトにドラッグ&ドロップして組み込んだりできるはずです。あるいは、JREのlibフォルダ内にコピーして利用することもできます。他、プロジェクトの設定を追加してライブラリの参照を組み込むこともできます。 そのへんは、いろいろやり方があります。Eclipseは機能がかなりたくさんあるので、入門書などで勉強されると良いと思います。

westwest_2007
質問者

お礼

shylockさん、回答有難うございます。 Eclipseの機能について、もう少し勉強します。 ところで、No3の回答の中で、 >「コンポーネントのカスタマイズ」・・・・こうしたことがAWTではできない、ということです。 # この意味が読み返してみるとよく理解出来ないのですが、AWTでは、継承とかメソッドの上書きは  出来ると思うのですが、shylockさんの回答の内容はそのような意味ではないということでしょうか。 宜しくお願いします。

noname#247307
noname#247307
回答No.4

>アプレットにパネルをaddするなら、「Panel」クラスとか「Frame」クラスが「Applet」クラスの >サブクラスになるべきのような感じがするのですが、この考えは間違っているのでしょうか。 間違っています。 継承というのは、既にあるクラスを元に、その機能を拡張して新しいクラスを作ることです。つまり、継承して作ったサブクラスのほうが、より特定の用途において高機能になるわけです。逆にいえば、継承する元になったスーパークラスのほうが、特定の用途に限定されないだけ幅広い利用が可能になります。 Panelは、コンテナ(コンポーネントを組み込むための部品)のベースとなるもので、特に何も機能はありません。それを継承して作ったAppletは、Webページに埋め込んで利用するための仕組みをPanelに追加しています。ですからWebページに埋め込むという特定用途に関してはAppletが役立ちますが、それ以外の用途では使えません。より汎用的なPanelのほうが幅広く利用できるわけです。 PanelクラスがAppletのサブクラスになるということは、PanelにもAppletの全機能が継承されている、ということになります。アプレットとは全然関係のない分野でPanelを利用する場合も、常にその中にアプレットの機能が組み込まれていることになります。それは非常に無駄なことです。幅広く利用される部品は低機能(必要最小限の機能)であるべきなのです。 例えば、「飛行機=Panel」「戦闘機=Applet」と考えてみてください。普通の飛行機を元に機能を追加して戦闘機を作ったとします。自衛隊が利用する(=Webページに埋め込んで使う)場合には戦闘機(Applet)でないといけません。それ以外の民間企業が使う場合は、飛行機(Panel)で十分です。すべての民間企業で利用する飛行機(Panel)に、戦闘機(Applet)の機能が実装されていたらまずいでしょう? GUIクラスの組み込み状態と、継承の構造をごっちゃにして考えると混乱します。GUIの組み込みは、単なる外見上の問題に過ぎないのですから。

westwest_2007
質問者

お礼

 shylockさん、回答有難うございます。  > 継承というのは、既にあるクラスを元に、その機能を拡張して新しいクラスを作ることです。  # そうでした。    参考書等を読んで何となく理解していたつもりでしたが、やはり継承の基本的なことを    理解出来ていなかったようです。  # ところで、Eclipse(Ver3.7)を使ってjavaのコードを書いていますが、Eclipseからラ イブラリを参照することは出来るのでしょうか。 宜しくお願い致します。

noname#247307
noname#247307
回答No.3

>何とか画像が表示されました。 > しかし、Panelの部分が、画像を隠すように(欠けるように)表示されます。 > これを解決する方法はあるのでしょうか。 それが、先の回答で説明した、AWTの制約です。AWTはネイティブコードを直接呼び出してコンポーネントの描画を行っているため、表示のカスタマイズができません。例えば、下の表示と上に重なったコンポーネントを透過させたり融合させたりすることはできないのです。 Panel部分の画像が隠されてしまうのを避けたいのであれば、設計を変更するしかありません。現在、AppletにPanelを組み込み、その中にTextFieldなどを組み込んでいますね? これを、Appletに直接TextFieldを組み込むような形に作りなおすしかありません。(つまり、Panelを使わないようにします) 既にTextFieldをAppletに組み込むことはできるのですから、これをAppletに直接組み込むようにすることはあなたにもできるはずです。頑張ってみてください。 ># これ("ネイティブコードで実装"、"コンポーネントの内部の描画などをカスタマイズ")は具体的には > どの様な意味でしょうか。 「ネイティブコードで実装」というのは、OSに依存するコードで実装している、という意味です。Javaのプログラムは、Java仮想マシンというプログラム内で実行されることはご存知と思います。Javaのプログラムは、すべてこの仮想マシンのCPU(ソフトェア的に作られたCPUのエミュレータですね)が処理するコードとして作られています。 が、AWTコンポーネントのグラフィック描画に関する部分は、Java仮想マシンの外側のOSにある機能を直接呼び出して実行しているのです。たとえばWindowsなら、WindowsのAPIを呼び出して直接描いています。 描画の処理がJava仮想マシンの外部で行われるということは、Java仮想マシン内からその部分にアクセスできないということです。つまり、Javaのプログラムでは扱えない機能でできている、ということです。 「コンポーネントのカスタマイズ」というのは、具体的にはコンポーネントクラスを継承して新しいクラスを作る、ということです。Swingなら、例えばJButtonを継承したクラスを作り、そこに描画処理のメソッドをオーバーライドすることで、表示をカスタマイズしたJButtonを作れます。こうしたことがAWTではできない、ということです。

westwest_2007
質問者

お礼

 shylockさん、回答有難うございます。  # AWTコンポーネントのグラフィック描画に関する内容等については、もう少し自分で勉強してみます。  # ところで、色々と参考書を読むと「Applet」クラスは「Panel」クラスのサブクラスとなっていま   すが、プログラムでは、アプレットにパネルをaddする書き方となります。    勿論クラスの構成?とプログラムの書き方は違うのかも知れませんが、何か奇異な感じがします。    アプレットにパネルをaddするなら、「Panel」クラスとか「Frame」クラスが「Applet」クラスの   サブクラスになるべきのような感じがするのですが、この考えは間違っているのでしょうか。  以上宜しくお願いします。

noname#247307
noname#247307
回答No.2

># init()の中で、add(tet)と変更してtetを呼んでいますが、やはり表示されません。 > どこが原因でしょうか。 ・TextboxTestのinitでadd(tet);していますが、サイズが設定されていません。tet.setSize(400,300);みたいな感じで大きさを設定する必要があります。 ・TextTestの初期化処理をinitメソッドに書いてありますが、初期化時にinitが呼び出されるのはAppletだからです。Panelならば、initではなくコンストラクタで初期化をするか、あるいはtet = new TextTest();した際にtet.init();を呼び出して初期化をしてやる必要があります。 とりあえず、上記の2点を確認して下さい。 >GUIライブラリが異なりますから混在すべきではありません # ライブラリの混在は良くないのは何となく理解出来るのですが、  具体的にはどのような理由でしょうか。?  ライブラリとOS間との処理方法、手順等が違っているということでしょうか。 ライブラリの使い方が間違っている、ということです。 AWTは、GUIのもっとも基本的なライブラリで、描画関係をネイティブコードで実装しています。このため、コンポーネントの内部の描画などをカスタマイズできません。 この欠点をなくすために作られたのがSwingで、こちらはコンポーネントの描画処理をすべてpure Javaで実装しています。これによりJavaで描画をカスタマイズできます。 仕組みが異なるものですので、混在は避けるべきです。Swing自体はAWTを継承して作られていますので、混在して組み込むこともできないわけではないのですが、仕組みが異なるものを無理やり組み込むことでトラブルの温床となりかねないので、初心者のうちはなるべくさけたほうが賢明です(不必要にトラブルの要因を自ら作るべきではない、という意味です)。

westwest_2007
質問者

お礼

 shylockさん、回答有難うございます。  何とか画像が表示されました。  しかし、Panelの部分が、画像を隠すように(欠けるように)表示されます。  これを解決する方法はあるのでしょうか。 > 描画関係をネイティブコードで実装しています。 このため、コンポーネントの内部の描画などをカスタマイズできません。 # これ("ネイティブコードで実装"、"コンポーネントの内部の描画などをカスタマイズ")は具体的には  どの様な意味でしょうか。  宜しくお願いします。

noname#247307
noname#247307
回答No.1

コードを見ただけで、実際に動作確認してはいませんが、気がついた点を。 まず、なんでAppletの中にAppletを組み込むの?というのが最初の印象です。まぁ、Appletはコンテナですから組みこないことはないでしょうが、意味がないでしょう。中に組み込むのはAppletなど使わず、Panelなどに変えるべきです。 次に、なんでAppletにJTextFieldを組み込むの?という疑問。Appletはawtであり、JTextFieldはSwingです。GUIライブラリが異なりますから混在すべきではありません。JTextFieldをTextFieldに変えるか、あるいはAppletとButtonをJApplet、JButtonに変えるか、どちらか一方だけ使うようにして下さい。 最後に、GUIが表示されない直接の原因ですが。アプレットのabcメソッド、どこからも呼び出されていませんから実行されません。initなどからabcを呼び出してやらないと実行されませんよ。そしてメソッドの中身、new TextTest() でインスタンスを作ってはいますが、どこにもaddして組み込んでいません。作成したインスタンスはアプレットのaddを呼び出して組み込んでください。 以上の点を改良してみてください。

westwest_2007
質問者

お礼

shylockさん、回答有難うござます。 # init()の中で、add(tet)と変更してtetを呼んでいますが、やはり表示されません。  どこが原因でしょうか。 >GUIライブラリが異なりますから混在すべきではありません # ライブラリの混在は良くないのは何となく理解出来るのですが、  具体的にはどのような理由でしょうか。?  ライブラリとOS間との処理方法、手順等が違っているということでしょうか。  宜しくお願いします。 =============================================================== public class TextboxTest extends Applet { MediaTracker tracker ; Image img ; TextTest tet ; public void init() { tracker = new MediaTracker( this ) ; img = getImage( getDocumentBase() , "../a.jpg" ) ; tracker.addImage( img , 0 ) ; tet = new TextTest() ; add(tet); } public void start() { try { tracker.waitForAll(); } catch (InterruptedException e) { } } public void paint( Graphics g2 ) { g2 = getGraphics(); g2.drawImage( img , 50 , 50 , 250 , 250 , this ) ; } } //=================================================================== class TextTest extends Panel implements ActionListener { TextField t0 ; Double lon = 0.0 ; public void init() { setLayout( null ) ; t0 = new TextField( "" ) ; t0.setBounds( 150 , 150 , 100 , 30 ) ; this.add( t0 ) ; Button bt = new Button( "Input" ) ; bt.setFont( new Font( "SansSerif" , Font.BOLD , 20 ) ) ; Color d = new Color( 0xff00ff ); bt.setBackground( d ) ; bt.setForeground( new Color( 0.0f , 0.0f , 0.0f ) ) ; bt.setBounds( 100 , 200 , 220 , 40 ) ; bt.addActionListener( this ) ; this.add( bt ) ; } public void actionPerformed( ActionEvent ae ) { ttest(); } public void ttest() { try { String str_lon = t0.getText() ; lon = Double.parseDouble( str_lon ) ; System.out.println( "lon =" + lon ) ; } catch( Exception ee ) { } } }

関連するQ&A

  • アプレットに画像が表示されません

     今晩は、java初心者です、宜しくお願いします。  下のようなプログラムを書きましたが、画像がアプレットに表示されません。  画像はeclipseで同じプロジェクト(フォルダ)内に置いています。  文法上のエラーは出ておりません。  原因がわかりません宜しくお願いします。 ============================ public class Test extends Applet { MediaTracker tracker ; Image img ; public void init() {   tracker = new MediaTracker( this ) ; img = getImage( getDocumentBase() , "a.jpg" ) ; tracker.addImage( img , 0 ) ; } public void start() {              try { tracker.waitForAll(); } catch (InterruptedException e) { } } public void paint( )      { Graphics g2 = getGraphics(); g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ; } }

    • ベストアンサー
    • Java
  • テキストボックス、ボタンが見えません、画像の影響で

     Java初心者です、宜しくお願いします。  アプレットに画像とテキストボックス、ボタンを張り付ける プログラムを書きましたが、実行すると画像を張り付けているためか、 テキストボックスが指定した大きさに見えず、せいぜい1文字程度の 大きさにしか表示されません。  また、ボタンも実行後には見えない状態で、マウスでクリックする と見えるようになります。  最初から、指定した大きさで、テキストボックス、ボタンを表示させる方法は あるのでしょうか。  また、別のクラスでパネルに色をつけていますが、全く実行されて いないようです。  この原因が分かりません、何故でしょうか。  以上宜しくお願いします。 ======================================================== public class Sample1 extends JApplet { private static final long serialVersionUID = 1L; MediaTracker tracker ; Image img ; Text1 t1 ; public void init() { Container cnt = getContentPane( ); setLayout( null ) ; t1 = new Text1( ) ; t1.init( ) ; cnt.add( t1 ) ; tracker = new MediaTracker( this ) ; img = getImage( getDocumentBase() , "../a.jpg" ) ; tracker.addImage( img , 0 ) ; } public void start() { try { tracker.waitForAll(); } catch (InterruptedException e) { } } public void paint( Graphics g ) { g.drawImage( img , 50 , 50 , 300 , 300 , this ) ; } } //=================================================================== class Text1 extends JPanel { private static final long serialVersionUID = 1L ; JTextField jtf ; public void init( ) { setLayout( null ) ; setBackground( Color.yellow ) ; setBounds( 30 ,30 ,500 , 500 ) ; jtf = new JTextField( "abcde" ) ; jtf.setBounds( 150 , 150 , 100 , 30 ) ; add( jtf ) ; JButton jbt = new JButton( "Check" ) ; jbt.setFont( new Font( "SansSerif" , Font.BOLD , 20 ) ) ; jbt.setBackground( Color.red ) ; jbt.setForeground( Color.blue ) ; jbt.setBounds( 100 , 200 , 220 , 40 ) ; this.add( jbt ) ; } }

    • ベストアンサー
    • Java
  • テキストボックスの値が変数に代入できない(1)

    お早うございます。 java初心者です、宜しくお願いします。 下記のような、アプレットのテキストボックスから値をとり 計算結果を表示するプログラムを書いてやりましたが、 値(実数値)がうまく変数に代入されていません。 この原因が分かりません、どこが悪いのか皆様方のご教示宜しくお願いいたします。 文法上のエラーは出ていません、AWTとswingとの混在は理解は出来ていじますが、それとは別の箇所で原因があると思いますが、解決できません、宜しくお願いいたします。 字数制限で二回の投稿となりますが、宜しくお願いいたします。 ================================================== public class WPCulc extends Applet implements ActionListener { Double Wu , Wd , Wul , Wdl = 0.0 ; Double q , Cwu , Cwd = 0.0 ; Double sita = 0.0 ; Double lon = 0.0 ; Double E , Vo = 0.0 ; Double Er2 , Gf = 0.0 ; Double Zb , Zg , arfa = 0.0 ; public void init() { setLayout(null) ; //一番上の文字 Label lb = new Label("Culc WP"); lb.setFont(new Font("SansSerif",Font.BOLD,20)); lb.setBackground(new Color(0xff9999)); Color c = Color.blue; //カラーを指定 lb.setForeground(c); //ラベルの前景色 lb.setBounds(25 , 40 , 250 ,50) ; add(lb); //longth(延長) Label lb_longth = new Label("L"); lb_longth.setFont(new Font("SansSerif",Font.BOLD,20)); lb_longth.setBackground(new Color(0xff9999)); lb_longth.setBounds(40 ,120 , 30 ,30) ; add(lb_longth) ; //θ Label lb_sita = new Label("θ"); lb_sita.setFont(new Font("SansSerif",Font.BOLD,20)); lb_sita.setBackground(new Color(0xff9999)); lb_sita.setBounds(40 ,160 , 30 ,30) ; add(lb_sita); //Zb Label lb_Zb = new Label("Zb"); lb_Zb.setFont(new Font("SansSerif",Font.BOLD,20)); lb_Zb.setBackground(new Color(0xff9999)); lb_Zb.setBounds(40 , 200 , 30 ,30) ; add(lb_Zb); //Zg Label lb_Zg = new Label("Zg"); lb_Zg.setFont(new Font("SansSerif",Font.BOLD,20)); lb_Zg.setBackground(new Color(0xff9999)); lb_Zg.setBounds(40 , 240 , 30 ,30) ; add(lb_Zg); //arufa Label lb_arfa = new Label("α"); lb_arfa.setFont(new Font("SansSerif",Font.BOLD,20)); lb_arfa.setBackground(new Color(0xff9999)); lb_arfa.setBounds(40 , 280 , 30 ,30) ; add(lb_arfa); lb.setBounds(25 , 40 , 250 ,50) ; //Gf Label lb_Gf = new Label("Gf"); lb_Gf.setFont(new Font("SansSerif",Font.BOLD,20)); lb_Gf.setBackground(new Color(0xff9999)); add(lb_Gf); lb_Gf.setBounds(40 , 320 , 30 ,30) ; //Vo Label lb_Vo = new Label("Vo"); lb_Vo.setFont(new Font("SansSerif",Font.BOLD,20)); lb_Vo.setBackground(new Color(0xff9999)); add(lb_Vo); lb_Vo.setBounds(40 , 360 , 30 ,30) ; //Button(InputDataの確認) Button bt = new Button("InputDataの確認"); bt.addActionListener(this); bt.setFont(new Font("SansSerif",Font.BOLD,20)); Color d = new Color(0xff00ff); //カラーを指定 bt.setBackground(d); //ボタンの背景色 bt.setForeground(new Color(0.0f, 0.0f, 0.0f)); //floatで指定 bt.setBounds(60,430,220,40); add(bt); //TextFieldの始まり(Fieldの作成のみとDataの取得) //InputDataの表示(addせず) TextField tf = new TextField("InputData"); Color e = new Color(255,255,255); //カラーを指定 tf.setBackground(e); Color f = new Color(0,255,0); tf.setForeground(f); tf.setBounds(55,130,180,20); // add(tf); JTextField jta00 = new JTextField("");//long JTextField jta0 = new JTextField("");//sita JTextField jta1 = new JTextField("");//Zb JTextField jta2 = new JTextField("");//Zg JTextField jta3 = new JTextField("");//α JTextField jta4 = new JTextField("");//Gf JTextField jta5 = new JTextField("");//Vo try { lon = Double.parseDouble(jta00.getText()) ; sita = Double.parseDouble(jta0.getText()) ; Zb = Double.parseDouble(jta1.getText()) ; Zg = Double.parseDouble(jta2.getText()) ; arfa = Double.parseDouble(jta3.getText()) ; Gf = Double.parseDouble(jta4.getText()) ; Vo = Double.parseDouble(jta5.getText()) ; }

    • ベストアンサー
    • Java
  • イメージのリサイズが表示されない

    JAVA初心者です、宜しくお願い致します。 イメージをリサイズするコードを書きましたが、うまく表示されません。 コードにはエラーは出ていません、原因が分かりません。 ご教示宜しく致します。 ====================================================================== public class reSizedIImage extends Applet { Image img ; private MediaTracker tracker; BufferedImage bufimg ; BufferedImage re_img ; public void init() { setBackground( Color.white ) ; img = Toolkit.getDefaultToolkit().getImage( "a.jpg" ) ; tracker = new MediaTracker( this ) ; tracker.addImage( img , 1 ) ; try { //イメージのロードが完了するまで待機 tracker.waitForID( 1 ) ; } catch ( Exception ex ) { ex.printStackTrace() ; } int imgw = img.getWidth( this ) ; int imgh = img.getHeight( this ) ; System.out.println(" imgw = " + imgw + " imgh = " + imgh ) ; int re_width = 300 ; int re_height = 300 ; bufimg = new BufferedImage( img.getWidth( this ) , img.getHeight( this ) , BufferedImage.TYPE_INT_RGB ) ; re_img = new BufferedImage( re_width , re_height , BufferedImage.TYPE_INT_RGB ) ; AffineTransformOp ato = new AffineTransformOp ( AffineTransform.getScaleInstance ( ( double )re_width / img.getWidth( this ) , ( double )re_height / img.getHeight( this ) ) , null ) ; ato.filter( bufimg , re_img ) ; int re_w = re_img.getWidth(this); int re_h = re_img.getHeight(this); System.out.println(" re_img_w = " + re_w + " re_img_h = " + re_h ) ; } public void paint( Graphics g ) { g.drawImage( re_img , 200 , 200 , this ) ; } }

    • ベストアンサー
    • Java
  • 画像がうまく表示されません

    下のプログラムを実行すると、 最初の読みこみはうまくいくのですが、(一部出なくなる画像がありますが…) Internet Explorerの更新ボタンを押した時、 (1)の部分で止まってしまうようで、画像が表示されなくなります。 (ローカルドライブで実行した場合はうまく表示できるのですが、ネットワークで実行した場合にこのようになってしまいます) import java.applet.Applet; import java.awt.*; public class met extends Applet{ Image img[] = new Image[6]; MediaTracker mt; public void init(){ mt = new MediaTracker(this); for(int i = 0;i < 6;i++){ img[i] = getImage(getCodeBase(),i+".gif"); mt.addImage(img[i],0); } try{ mt.waitForID(0); }catch(InterruptedException e){} } public void paint(Graphics g){ // (1) if(!mt.checkID(0)){ g.clearRect(0,0,500,500); g.drawString("読み込み中",200,240); return; } g.setColor(Color.white); g.fillRect(0,0,500,500); for(int i = 0;i < 6;i++){ g.drawImage(img[i],i*50,0,this); } } }

    • ベストアンサー
    • Java
  • java アプレット

    学校の授業でアプレットを学んでいます。 しかし・・・ 下のプログラムで、計算した結果をlabel3にはりつけたいのですが、計算結果がでてくれません・・・ボタンを押しても何もでてきません。 コマンドプロンプトで、エラーはでてきません。 お手数ですが、誰かどこがいけないのか教えて下さい。 import java.awt.*; import java.awt.event.*; public class B extends java.applet.Applet implements ActionListener { Label label3 = new Label(); Button button2 = new Button(); TextField textfield1= new TextField(10); TextField textfield2= new TextField(10); public void init() { button2.setLabel("入力したらクリック!"); button2.setBounds(new Rectangle(50, 465, 120, 20)); this.setLayout(null); label3.setBackground(Color.blue); label3.setBounds(new Rectangle(325, 80, 200, 35)); textfield1.setBounds(100, 425, 100, 25); textfield2.setBounds(150, 350, 100, 25); this.add(textfield2, null); this.add(label3, null); this.add(textfield1, null); this.add(button2, null);} public void actionPerformed(ActionEvent event) {if(event.getSource() == button2) {int diff = Integer.parseInt(textfield1.getText()) - Integer.parseInt(textfield2.getText()); String otsuri; otsuri ="お釣りは"+ diff +"円です。"; label3.setText(otsuri);} }} よろしくお願いします。

    • ベストアンサー
    • Java
  • 画像の縮小のプログラムのエラーについて教えて下さい

     java初心者です、宜しくお願いします。  画像の縮小のプログラムを色々と他のサンプルコードとかを参考にしながら 書きましたが、黒い四角形がWindowに表示されるだけです。  プログラム自体のエラーは表示されません。  一体どこが悪いのでしょうか、宜しくお願いします。 ===================================================== public class reSizedIImage extends Applet { Image img ; private MediaTracker tracker; BufferedImage bufimg ; BufferedImage re_img ; public void init() { setBackground( Color.white ) ; img = Toolkit.getDefaultToolkit().getImage( "a.jpg" ) ; tracker = new MediaTracker( this ) ; tracker.addImage( img , 1 ) ; try { // tracker.waitForID( 1 ) ; } catch ( Exception ex ) { ex.printStackTrace() ; } int imgw = img.getWidth( this ) ; int imgh = img.getHeight( this ) ; System.out.println(" imgw = " + imgw + " imgh = " + imgh ) ; int re_width = 300 ; int re_height = 300 ; bufimg = new BufferedImage( img.getWidth( this ) , img.getHeight( this ) , BufferedImage.TYPE_INT_RGB ) ; re_img = new BufferedImage( re_width , re_height , BufferedImage.TYPE_INT_RGB ) ; AffineTransformOp ato = new AffineTransformOp ( AffineTransform.getScaleInstance ( ( double )re_width / img.getWidth( this ) , ( double ) re_height / img.getHeight( this ) ) , null ) ; ato.filter( bufimg , re_img ) ; int re_w = re_img.getWidth(this); int re_h = re_img.getHeight(this); System.out.println(" re_img_w = " + re_w + " re_img_h = " + re_h ) ; } public void paint( Graphics g ) { g.drawImage( re_img , 200 , 200 , this ) ; } }

    • ベストアンサー
    • Java
  • Javaアプレットについてですが

    Javaアプレットでボタンを押したら数字が増えるものを作っているのですがどうもうまく動きません。 ソースは下の通りです。 変更しなければいけないところがあるならお願いします。 import java.applet.Applet; import java.awt.Graphics; import java.awt.Button; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Sample7 extends Applet implements Runnable, ActionListener { Button bt; int num; public void init() { bt = new Button("開始"); add(bt); bt.addActionListener(this); Thread th; th = new Thread(this); th.start(); } public void actionPerformed(ActionEvent ae) { public void run() { try{ for(int i=0; i<11; i++){ num = i; repaint(); Thread.sleep(1000); } } catch(InterruptedException e){} } } public void paint(Graphics g) { String str = num + "です。"; g.drawString(str, 50, 50); } }

    • ベストアンサー
    • Java
  • CardLayoutに関する質問です

    前回、swingに関する質問をさせていただいたものです。 前回頂いたご回答をヒントに新しく作り直したのですが、CardLayoutのパネルにFlowLayoutのパネルを追加してもボタンが右端で折り返してくれません。 色々調べたのですが、この二つのレイアウトを使った例が見つかりませんでした。 長文になりますが、以下にソースを記載いたします。 今一度、お知恵をお借りできれば幸いです。 ------------以下ソースコード------------------- import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.imageio.*; import javax.swing.Timer; class Main extends JPanel implements ActionListener{ static JFrame frame = new JFrame(); String[] imgStr = { "1","2","3","4","5","6","7","8","9", "10","11","12","13","14","15","16","17","18", "19","20","21","22","23","24","25","26","27", "28","29","30","31","32","33","34","35","36", "37","38","39","40","41","42","43","44","45","46","終了"}; JButton[] bt = new JButton[imgStr.length]; JPanel mainPanel = new JPanel(); JPanel btPanel = new JPanel(); JPanel image; MediaTracker tracker; CardLayout cardLayout = new CardLayout(); Image img; ImageCanvas canvas; Timer time = new Timer(0,this); int eventNo = -1; public static void main(String[] args){ frame.add(new Main()); frame.setLayout(new FlowLayout()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(0, 0, 1024, 576); frame.setTitle("タイトル"); frame.setVisible(true); } public Main(){ mainPanel.setLayout(cardLayout); mainPanel.setBounds(0, 0, 1024, 576); btPanel.setBounds(0, 0, 1024, 576); for(int i=0; i<imgStr.length; i++){ bt[i] = new JButton(imgStr[i]); bt[i].setActionCommand(imgStr[i]); bt[i].addActionListener(this); btPanel.add(bt[i]); } btPanel.setLayout(new FlowLayout()); mainPanel.add(btPanel,"bt"); add(mainPanel); } public void actionPerformed(ActionEvent e){ if(e.getActionCommand() == null){ eventNo = -1; }else{ for(int i=0; i<imgStr.length; i++){ if(e.getActionCommand().equals(imgStr[i])){eventNo = i;} } } if(eventNo==-1){ time.stop(); cardLayout.show(mainPanel,"bt"); } if(eventNo==46){ System.exit(0); } if(eventNo>=0){ tracker = new MediaTracker(this); try{ img = ImageIO.read(new File("./image/001.jpg")); tracker.addImage(img, 0); tracker.waitForAll(); canvas = new ImageCanvas(img); mainPanel.setBounds(0, 0, 1024, 576); mainPanel.add(canvas,"img"); cardLayout.show(mainPanel,"img"); time.setInitialDelay(5000); time.start(); }catch(Exception ex){ System.out.println(ex); } } } }

    • ベストアンサー
    • Java
  • AWTのアプレットにおいてのイベント処理

    javaのAWTでアプレット作成をしているのですがイベント処理部分をどう記述したらいいか解りません。 組み込みたいイベント処理は 1、アプレット起動時に「単語<tab>数字:数字,数字:数字,.......」という形のデータが入っているファイルを読み込んで数字列が一番多い単語(ただし二字熟語~四字熟語)を多い順に9つのボタンのラベルに格納していく。(どの位置のボタンのラベルに格納するかは自由) 2、ボタンを押すと1に書いているファイルを読み込みボタンのラベルに対応した数字列を見つけそれをテキストフィールドに全て出力させる。 ヒントだけでも宜しければ教えてください。お願いします。 /*<HTML> <BODY> <APPLET CODE="Tagcloud.class" WIDTH=400 HEIGHT=350> </APPLET> </BODY> </HTML>*/ //java.appletパッケージをimport宣言 //java.awtパッケージもimport宣言 import java.applet.*; import java.awt.*; import java.awt.event.*; public class Tagcloud extends Applet implements ActionListener{ //AWTのGUIコンポーネントクラスの作成 Button bu1 = new Button(""); Button bu2 = new Button(""); Button bu3 = new Button(""); Button bu4 = new Button(""); Button bu5 = new Button(""); Button bu6 = new Button(""); Button bu7 = new Button(""); Button bu8 = new Button(""); Button bu9 = new Button(""); TextField tf=new TextField(20);//テキストフィールド public void init(){ setBackground(new Color(0,190,221)); //レイアウトを自由に変更 setLayout(null); //アプレット領域にGUIコンポーネント(部品)の追加(載せる) add(bu1); add(bu2); add(bu3); add(bu4); add(bu5); add(bu6); add(bu7); add(bu8);   add(bu9);   add(tf); //コンポーネントの配置 bu1.setBounds(50,50,80,20); bu2.setBounds(150,50,80,20); bu3.setBounds(250,50,80,20); bu4.setBounds(50,120,80,20); bu5.setBounds(150,120,80,20); bu6.setBounds(250,120,80,20); bu7.setBounds(50,190,80,20); bu8.setBounds(150,190,80,20); bu9.setBounds(250,190,80,20); tf.setBounds(50,250,250,20); //ボタンにActionListenerを登録します。 bu1.addActionListener(this); bu2.addActionListener(this); bu3.addActionListener(this); bu4.addActionListener(this); bu5.addActionListener(this); bu6.addActionListener(this); bu7.addActionListener(this); bu8.addActionListener(this); bu9.addActionListener(this); tf.addActionListener(this); } public void actionPerformed(ActionEvent e){ //ここにイベント処理をする部分を記述 } }