• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:別ウインドウに画像と文字を表示しない)

別ウインドウに画像と文字を表示しない

このQ&Aのポイント
  • ボタンをクリックすると別ウインドウが開きますが、画像と文字が表示されません。
  • 原因が分からず困っています。どなたかご教示いただけますか?

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

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.3

> 「source == jb1」が間違いなら、どのように書くのが正解なのでしょうか。 "if( source == jb1 )"の部分自体は書き換える必要はありません。 まずは下記のことを理解してください。 ・質問者さんのコードにはjb1という名前の変数が2つ存在しています。  (A) init()のローカル変数でJButton型のもの  (B) ImageTestのインスタンス変数でJLabel型のもの ・(A)にはinit()の中で値が代入されていますが、(B)には値が代入されていないので常にnullです。 ・actionPerformed()でsourceと比較されているのは(B)であるため、条件が真になりません。 質問者さんは、sourceの値とinit()で(A)に代入した値を比較したいのですよね? どう書けばいいかですが、(A)(B)2つのjb1を使い分ける必要はなさそうなので1つにまとめればいいだけです。init()のローカル変数をactionPerformed()から参照することは不可能なので、インスタンス変数である(B)のほうを使います。 ・ImageTestのインスタンス変数のjb1の型をJLabelからJButtonに変えます。 ・init()の中でローカル変数のjb1を作っているのをやめて、代わりにインスタンス変数のjb1を使うようにします。具体的には、JButton jb1 = new JButton( "star" );の行のjb1の前にあるJButtonを消します。 > しかし、imgは表示されません。 質問者さんがどのような環境でどのようにAppletを実行しているのかが分かりませんが、適切な場所(ImageTest.classと同じ場所)に画像ファイルを置けば表示されましたよ。画像ファイルを読めなくてもdrawImage()が例外を発生することはないみたいですが。

htgotk_001
質問者

補足

 salsberryさん、有難うございました。  同じ変数を2つの型で定義していたとは全く気がつきませんでした。  本当に有難うございました、今後とも宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

init()またはstringCase()が呼ばれていないことをどうやって確認しましたか? お礼にある書き方であれば呼ばれているはずです。 もう一つの問題は、actionPerformed()の中でif( source == jb1 )の条件が成立することがなくlblnumが1にならないために、stringCase()が呼ばれてもstrへの代入が発生しないことです。stringCase()のswitchの中に default: str="Error"; break; という行を追加しておけば、とりあえず文字が描画されないということはなくなります。 source == jb1が真にならないのは、init()の中で使われているJButton型のjb1とactionPerformed()の中から見えているJLabel型のjb1は別物だからです。いろいろいじっている間にこうなってしまったのでしょうが、外側と内側のスコープで同名の変数を使うのは間違いの元です。

htgotk_001
質問者

お礼

 salsberryさん、回答有難う御座います。  stringCase();の中で「default: str="Error";break;」をかいてやると、「Error」が 表示されました。  しかし、imgは表示されません。  同じ原因だと思いますが、imgが表示されないことについて、「NullPointException・・・」 というエラーも吐きません。  >source == jb1が真にならないのは、init()の中で使われているJButton型のjb1と  >actionPerformed()の中から見えているJLabel型のjb1は別物だからです。  >外側と内側のスコープで同名の変数を使うのは間違いの元です。 の意味がよく理解出来ません。  この場合の「source」は、「 jb1」ではないということでしょうか。  「source == jb1」が間違いなら、どのように書くのが正解なのでしょうか。  宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

試してみました。 MyPanel1.paint()でg.drawImage()による画像の描画は実行されますが、その次のg.drawString()で例外が発生します。 Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException: String is null at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:3045) at qa7816901$MyPanel1.paint(qa7816901.java:82) このメッセージの中に書かれているとおり、drawString()に渡しているstrがnullであることが原因です。 MyPanel1.init()で"test"という文字列を代入しているからnullではないはず、と思っているかもしれませんが、MyPanel1.init()が呼ばれることはないのでstrはnullのままです。Appletのサブクラスであればinit()が自動的に呼ばれますが、FrameのサブクラスであるMyPanel1の場合は誰かが勝手にinit()を呼んでくれるということはありません。

htgotk_001
質問者

お礼

 salsberryさん、回答有難うございます。  ・ 「init();」をそのままにして、「mp1.init();」をメインクラスに書いてやりましたが、メインから   呼ばれません。  ・ 「init();」を「stringCase( );」というメッソドに変えましたが、メインクラスからは呼ば   れません。  ・ 「mp1.stringCase( );」をメインクラスに書いてやりましたが、やはりメインクラスから呼ばれま   せん。  全く原因が分かりません、何故でしょうか。宜しくお願いします。 ======================================================================== public class ImageTest extends Applet implements ActionListener { Image img1 , img2 ; JLabel jb1 ; int lblnum ; MyPanel1 mp1 ; Graphics g ; public void init() { img1 = getImage( getDocumentBase() , "star1.jpg" ) ; this.setBackground( Color.yellow ) ; this.setLayout( null ) ; JPanel jp1 = new JPanel() ; jp1.setSize( 1500 , 850 ) ; jp1.setLayout( null ) ; jp1.setBackground( Color.yellow ) ; JPanel jp2 = new JPanel() ; jp2.setBackground( Color.magenta ) ; this.add( jp1 ) ; this.add( jp2 ) ; JLabel jl1 = new JLabel( new ImageIcon( "star1.gif" ) ) ; jl1.setSize( 150 , 150 ) ; jl1.setLocation( 50 , 50 ) ; jp1.add( jl1 ) ; JButton jb1 = new JButton( "star" ) ; jb1.setMargin(new Insets( 1 , 1 , 1 , 1 ) ) ; jb1.setBorderPainted( false ) ; jb1.setForeground( Color.red ) ; jb1.setBackground( Color.yellow ) ; jb1.setLocation( 75 , 210 ) ; jb1.setSize( 100 , 50 ) ; jb1.setFont( new Font( "SansSerif" , Font.ITALIC , 20 ) ) ; jb1.addActionListener( this ) ; jp1.add( jb1 ) ; } public void actionPerformed( ActionEvent e ) { Object source = e.getSource() ; if( source == jb1 ) lblnum = 1 ; MyPanel1 mp1 = new MyPanel1( lblnum , img1 ) ; // mp1.init( ); mp1.stringCase( ); mp1.setVisible( true ); repaint(); } class MyPanel1 extends Frame { int k ; String str ; Image img ; public MyPanel1( int k , Image img ) { this.k = k ; this.img = img ; setSize( 500 , 500 ) ; setBackground( Color.magenta ) ; setLocation( 300 , 300 ) ; } // public void init( ) public void stringCase( ) { switch( k ) { case 1: str = "test" ; break ; } setVisible( false ) ; } public void paint( Graphics g ) { g.drawImage( img , 0 , 0 , 30 , 30 , this ) ; g.drawString( str , 150 , 150 ) ; } } } =============================================================================

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • eclipse 相対パスによる画像表示

    java swing eclipseにて絶対パスによる画像表示はできるのですが「相対パスによる」画像表示ができません。カレントディレクトリはeclipse/HelloWorld/src/testです。 testはパッケージで 画像自体はgifファイルでtestパッケージの中に入っていて画像を呼び出すファイル(part18.java)もtestパッケージに入っています。 testパッケージに入っている「part18」のソースです。(絶対パスでの画像表示はできます。) package test; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import java.awt.Color; import java.awt.Font; public class part18 { public static void main(String[] args) { System.out.println("やっはろー"); // ウィンドウフレームを作成、表示 JFrame jf = new JFrame(); jf.setBounds(20,50,800 ,450); jf.setVisible( true ); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 親パネルを作成し、フレームに貼り付け JPanel jp = new JPanel(); jp.setBackground( Color.BLACK ); jf.add( jp ); // ラベルを作成し、親パネルに貼り付け JLabel jl = new JLabel("魔王が世界を滅ぼそうとしています"); Font f = new Font(Font.MONOSPACED, Font.ITALIC, 40); jl.setFont( f ); jl.setForeground( new Color(255,128,0) ); jp.add( jl ); jf.setVisible( true ); //パネルを作成し、親パネルに貼り付け JPanel jpChild = new JPanel(); jpChild.setBackground( Color.RED ); jp.add( jpChild ); // ラベルを作成し、子パネルに貼り付け JLabel jlChild = new JLabel("トンヌラ Lv99 HP999/999"); jlChild.setFont( f ); jlChild.setForeground( Color.WHITE); jpChild.add( jlChild ); jf.setVisible( true ); // 画像付きラベルを作成し、親パネルに貼り付け JLabel jlImage = new JLabel( new javax.swing.ImageIcon("/Users/○○/Desktop/mine/sozai/img15_1.gif") ); jlImage.setSize( 640 , 481 ); jp.add( jlImage ); jlImage.setVisible( true ); } } 画像表示を相対パス(eclipse上)で表示するにはどうすれば良いでしょうか? またはどこが間違っているでしょうか? バカでスミマセンお願いします。

  •  型Containerのメソッドadd(String ,Compone

     型Containerのメソッドadd(String ,Component)は引数(JPanel ,String)に適用できません。  今晩は、java初心者です、エラーの意味が理解出来ません、宜しくお願い致します。  《A》というプログラムと《B》というプログラムで、クラスを「class MyPanel extends JPanel」と「class JPanel」に変えただけで、「型Containerのメソッドadd(String ,Component)は引数(JPanel ,String)に適用できません。」というエラーがでます。  一体何が原因でしょうか。  JPanelを継承したクラス(MyPanel)を呼び出すのか、そのまま、JPanelクラスを呼び出すのかの違いだけで、内容的には何も変わるところがないはずだと思うのですが。  意味が理解出来ません。 ======================================================================== 《A》 public class Sample extends JFrame { Sample() { this.setSize(300,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); MyPanel panel = new MyPanel(); this.add(panel , BorderLayout.CENTER); this.setVisible(true); } public static void main(String[] args) { new Sample(); } } class MyPanel extends JPanel { public void paintComponent(Graphics g) { g.setColor(Color.red); g.fillOval(50,50,100,100); } } ============================================================ 《B》 public class Sample extends JFrame { Sample() { this.setSize(300,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); this.add(panel , BorderLayout.CENTER); this.setVisible(true); } public static void main(String[] args) { new Sample(); } } class JPanel { public void paintComponent(Graphics g) { g.setColor(Color.red); g.fillOval(50,50,100,100); } } =======================================================================

    • ベストアンサー
    • Java
  • java applet 上段に2×3、下段に1×3のボタンを作る

    タイトルのようなアプレットを作りたいのですがなぜか実行されません。どこがおかしいのでしょうか? (文字数制限のため省略) { private JButton bt[] = new JButton[9]; private JPanel pn[] = new JPanel[2]; int i; public void init() { Container cnt = getContentPane(); for(i=0; i<9; i++){ add(bt[i] = new JButton("")); } pn[0] = new JPanel(); pn[1] = new JPanel(); //上パネルに置くボタン6つ bt[0].setSize(80,80); bt[0].setLocation(0,0); bt[1].setSize(80,80); bt[1].setLocation(80,0); bt[2].setSize(80,80); bt[2].setLocation(160,0); bt[3].setSize(80,80); bt[3].setLocation(0,80); bt[4].setSize(80,80); bt[4].setLocation(80,80); bt[5].setSize(80,80); bt[5].setLocation(160,80); //下パネルに置くボタン3つ bt[6].setSize(80,80); bt[6].setLocation(0,200); bt[7].setSize(80,80); bt[7].setLocation(80,200); bt[8].setSize(80,80); bt[8].setLocation(160,200); //上パネルと下パネルの作成 pn[0].setLocation(0,0); pn[1].setLocation(0,200); //ボタンをパネルに付ける pn[0].add(bt[0]); pn[0].add(bt[1]); pn[0].add(bt[2]); pn[0].add(bt[3]); pn[0].add(bt[4]); pn[0].add(bt[5]); pn[1].add(bt[6]); pn[1].add(bt[7]); pn[1].add(bt[8]); //コンテナへ追加 cnt.add(pn[0]); cnt.add(pn[1]); } } 座標を指定してボタンを設置する方法にしたいと思っています。 ちなみに完成図はこのような感じにしたいです。 ↓ □□□ □□□ □□□

    • ベストアンサー
    • Java
  • ActionListener について

    JFrame の上に JPanel があり、JPanel の上に JButton があるとします。 JButton が押されたことを JFrame に知らせるにはどうしたらいいでしょうか。 わかるところまで書いてみました。 class MyFrame extends JFrame implements ActionListener { MyPanel myPanel = new MyPanel(); MyFrame() { myPanel.addActionListener(this); add(myPanel); } public void actionPerformed(ActionEvent e) { System.out.println("The button on the MyPanel was pressed!"); } public static void main(String[] args) { new MyFrame(); } } class MyPanel extends JPanel implements ActionListener { JButton button1 = new JButton(); MyPanel() { button1.addActionListener(this); add(button1); } public void actionPerformed(ActionEvent e) { } }

    • ベストアンサー
    • Java
  • finalの意味

    import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ExerciseD8L1{ public static void main(String args[]){ final JFrame myFrame = new JFrame(); myFrame.getContentPane().setLayout(new BorderLayout()); final JLabel myLabel = new JLabel(); JPanel myPanel = new JPanel(); myFrame.getContentPane().add(myLabel,BorderLayout.CENTER); myFrame.getContentPane().add(myPanel,BorderLayout.NORTH); JButton btn1 = new JButton("btn1"); btn1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ myLabel.setText("btn1がクリックされました"); } }); }); myPanel.add(btn1); myFrame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); myFrame.setSize(400,100); myFrame.setVisible(true); } } これで、finalをつけないとコンパイルできません。 なぜ、fianlが必要なんでしょう。 どのようなときにfinalを用いるのでしょう。 お願いします。

    • ベストアンサー
    • Java
  • Radioボタンの割込み処理

    毎度、お世話になります。 Radioボタンの割込み処理について、お教えください。 コード中の『se[0].addChangeListener(this)』にて、Radioボタンをクリックしますと 割込みが発生し、正常に動作します。 Q1)このthisを他のワードに変更できないでしょうか? 理由:他のプログラムで、thisと記述した瞬間に、エラーcheckに引っかかります。 nullの場合は、OKですが、割込みが発生しません。 以上、宜しくお願いします。 ============== import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt.GridLayout; import javax.swing.ButtonGroup; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; class JRadioButtonTestB extends JFrame implements ChangeListener { JRadioButton se[]=new JRadioButton[2]; JLabel lb1, lb2; JRadioButtonTestB() { lb1 = new JLabel(); lb2 = new JLabel(); Container cont = getContentPane(); cont.setLayout(new BorderLayout()); //性別================================ se[0] = new JRadioButton("男性"); se[1] = new JRadioButton("女性"); se[0].addChangeListener(null); //<----問題点 se[1].addChangeListener(null); // JPanel pSex = new JPanel(); pSex.setBackground(Color.cyan); pSex.setLayout(new FlowLayout()); pSex.add(new JLabel("性別")); pSex.add(se[0]); pSex.add(se[1]); ButtonGroup bgsex = new ButtonGroup(); bgsex.add(se[0]); bgsex.add(se[1]); JPanel kaku = new JPanel(); kaku.setBackground(Color.green); kaku.setLayout(new GridLayout(3,2)); kaku.add(new JLabel("確認")); kaku.add(new JLabel(" ")); kaku.add(new JLabel("性別")); kaku.add(lb1); cont.add("North",pSex); cont.add("South",kaku); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("JRadioButtonTestB"); setSize(320, 200); setVisible(true); } public void stateChanged(ChangeEvent e) { if(se[0].isSelected()) lb1.setText("男性"); if(se[1].isSelected()) lb1.setText("女性"); } public static void main(String[] args) { new JRadioButtonTestB(); } } //===

    • ベストアンサー
    • Java
  • javaのボタン表示等に関する質問

    下記のコードはフォームをNORTH、CENTER、SOUTHEに分割して、それぞれのpaneに ラベルとボタンを表示するものです。 Q1)myFrame.setBounds(350,0, total_x, total_y)をコンストラクターの最初に記述しますと  フォームの表示が正常でなく、コンストラクターの最後では、正常に行なわれます。  この理由等について、コメント頂けますと有り難いです。 Q2)mainに記述してある、下記のコードは無くても、Xでクロースできますが,このコード  の記述は正しいでしょうか GridLayout_new frame = new GridLayout_new(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 以上お手数ですが、コメント頂けますと大変助かります。 //============================================= import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.LineBorder; public class GridLayout_new extends JFrame{ int panelA_x=200, panelA_y=50; int panelB_x=200, panelB_y=200; int panelC_x=200, panelC_y=50; int total_x=panelA_x; int total_y=panelA_y+panelB_y+panelC_y; public static void main(String[] args){ GridLayout_new frame = new GridLayout_new(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } GridLayout_new(){ JFrame myFrame=new JFrame(); myFrame.setTitle("panelA"); // myFrame.setBounds(350,0, total_x, total_y); //正常なformの表示が出来ない myFrame.setVisible(true); LineBorder border = new LineBorder(Color.BLACK, 1, true); //======================== JLabel button1=new JLabel("Label1"); GLabel_Layout(button1, border); JButton button2 = new JButton("button2"); button_Layout(button2, border); //======================== JLabel button3=new JLabel("Label3"); GLabel_Layout(button3, border); JButton button4 = new JButton("button4"); button_Layout(button4, border); //======================== JLabel button5=new JLabel("Label5"); GLabel_Layout(button5, border); JButton button6 = new JButton("button6"); //======================== JLabel button7=new JLabel("Label7"); GLabel_Layout(button7, border); JButton button8 = new JButton("button8"); //======================== JLabel button9=new JLabel("Label9"); GLabel_Layout(button9, border); JButton button10 = new JButton("button10"); button_Layout(button10, border); //======================== JLabel button11=new JLabel("Label11"); GLabel_Layout(button11, border); JButton button12 = new JButton("button12"); button_Layout(button12, border); //================================== JPanel p1 = new JPanel(); GridLayout layout1 = new GridLayout(2,2); //2行、2列の設定 layout1.setHgap(2); layout1.setVgap(10); p1.setLayout(layout1); p1.setBackground(Color.GREEN); p1.add(button1); p1.add(button2); p1.add(button3); p1.add(button4); myFrame.setSize(panelA_x, panelA_y); myFrame.getContentPane().add(p1, BorderLayout.NORTH); //============================== JPanel p2 = new JPanel(); GridLayout layout2 = new GridLayout(2,2); //2行、2列の設定 layout2.setHgap(2); layout2.setVgap(10); p2.setLayout(layout2); p2.setBackground(Color.GREEN); p2.add(button5); p2.add(button6); p2.add(button7); p2.add(button8); myFrame.setSize(panelB_x, panelB_y); myFrame.getContentPane().add(p2, BorderLayout.CENTER); //================================== JPanel p3 = new JPanel(); GridLayout layout3 = new GridLayout(2,2); //2行、2列の設定 layout3.setHgap(2); layout3.setVgap(10); p3.setLayout(layout3); p3.setBackground(Color.GREEN); p3.add(button9); p3.add(button10); p3.add(button11); p3.add(button12); myFrame.setSize(panelC_x, panelC_y); myFrame.getContentPane().add(p3, BorderLayout.SOUTH); myFrame.setBounds(350,0, total_x, total_y); //正常なformの表示 } //constructor void GLabel_Layout(JLabel label, LineBorder border){ label.setPreferredSize(new Dimension(80,20)); label.setBorder(border); label.setBackground(Color.lightGray); label.setOpaque(true); } void button_Layout(JButton button, LineBorder border){ button.setPreferredSize(new Dimension(80,20)); button.setBorder(border); } } //main class....GridLayout_new

    • ベストアンサー
    • Java
  • JFrameのエラーの原因が分かりません。

     java初心者です、宜しくお願いします。  JFrameのコードを下記のように書いてやりましたが、「サーバーにデプロイするものが見つかり ません。」というエラーが出ます。   色々と参考書を見ながら勉強していますが、エラーの原因がさっぱりわかりません。    どなたか宜しくお願いします。 ============================================================================ public class JF4 extends JFrame { public void init() { Container cnt = getContentPane(); setBackground(Color.RED); setSize(400,400); setTitle("title"); setVisible(true); } } ================================================================================= public class JF4 extends JFrame { public void init() { Container cnt = getContentPane(); JPanel panel = new JPanel(); panel.setBackground(Color.RED); getContentPane().add(panel); setSize(400,400); setTitle("title"); setVisible(true); } }

  • ボタンがマウスオーバーしないと表示されない

    java初心者です。 やりたいことは、 i_step変数によって、表示する、画像や、パネル(ボタンが作成されています)を替えたいのです。 今はB_Nextボタンによってi_step変数が加算されます。 i_step=1になると、画像が表示されるのですが、 一緒に表示されてほしい【ボタン1】が表示されません。 ですが、マウスアップすると、表示されるようになります。 はじめは【NEXT】ボタンも表示されなかったのですが、 過去の質問を検索し、 http://oshiete1.goo.ne.jp/qa2530138.html を参照して、super.paint(g);を追加したら、 【NEXT】ボタンは表示されるようになりました。 ソースは以下です。 package guidance_ap; import java.awt.*; import javax.swing.*; public class Test extends JApplet { Image img1, img2; private JButton B_Next = null; private JPanel jContentPane = null; private JPanel jPanel1 = null; private JButton b1 = null; int i_step = 0; public Test() { super(); } public void init() { this.setSize(640, 480); this.setContentPane(getJContentPane()); img1 = getImage(getCodeBase(), "test.gif"); img2 = getImage(getCodeBase(), "test2.gif"); } public void paint(Graphics g) { super.paint(g); jContentPane.removeAll(); jContentPane.add(getB_Next(), null); switch (i_step) { case 0: g.drawImage(img1, 0, 0, this); break; case 1: g.drawImage(img2, 0, 0, this); jContentPane.add(getJPanel1(), null); break; } } private JPanel getJContentPane() { if (jContentPane == null) { try { jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.setOpaque(false); } catch (java.lang.Throwable e) { e.printStackTrace(); } } return jContentPane; } private JButton getB_Next() { if (B_Next == null) { try { B_Next = new JButton(); B_Next.setText("NEXT"); B_Next.setLocation(new Point(559, 0)); B_Next.setSize(new Dimension(80, 40)); B_Next.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { i_step++; repaint(); } }); } catch (java.lang.Throwable e) { e.printStackTrace(); } } return B_Next; } private JPanel getJPanel1() { if (jPanel1 == null) { try { jPanel1 = new JPanel(); jPanel1.setOpaque(false); jPanel1.setLayout(null); jPanel1.setSize(new Dimension(640, 480)); jPanel1.setLocation(new Point(0, 0)); jPanel1.setPreferredSize(null); jPanel1.add(getb1(), null); } catch (java.lang.Throwable e) { e.printStackTrace(); } } return jPanel1; } private JButton getb1() { if (b1 == null) { try { b1 = new JButton(); b1.setSize(new Dimension(190, 40)); b1.setText("ボタン1"); b1.setLocation(new Point(90, 400)); b1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed( java.awt.event.ActionEvent e) { } }); } catch (java.lang.Throwable e) { e.printStackTrace(); } } return b1; } } ちなみに【ボタン1】は画像と重なる位置にあります。 super.paint(g);を paintの最後に記述すると、ボタンは表示されますが、 画像が一瞬でて消えてしまいます。 何がいけないのでしょうか?

    • ベストアンサー
    • Java
  • Jlabel?の上に2つ画像を載せクリックを識別

    JLabelを使えばいいのかよくわからないのですが掲示した 画面のように背景色に薄い赤を指定して2つの矢印画像を 表示します。その矢印の中央に年月を表示したいと思っています。 また、右の矢印をクリックしたら翌月の年月が表示され 左の矢印をクリックしたら前月の年月が表示したいです。 これをswingで完成したいと思っています。 また各コンポーネントは setBounds(int x,int y,int width,int height)で出来ると助かります。 ImageIcon leftIcon = new ImageIcon("./img/left.gif"); ImageIcon rightIcon = new ImageIcon("./img/right.gif"); JLabel label = new JLabel(); label.setText("2010年10月"); label.setIcon(leftIcon); label.setLocation(20,0); label.setSize(170, 20); label.setBackground(Color.white); label.setOpaque(true); ここから先がわかりません どうしても1つの画像と1つのテキストしか表示できません。

    • ベストアンサー
    • Java