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

このQ&Aのポイント
  • java初心者です。ボタンがマウスオーバーしないと表示されない
  • i_step変数によって、表示する、画像や、パネルを替えたい。【ボタン1】が表示されませんが、マウスアップすると表示されるようになります。
  • 【NEXT】ボタンは表示されるようになったが、画像が一瞬でて消えてしまいます。
回答を見る
  • ベストアンサー

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

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
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

何をやりたいのか、よく分からないので、抜本的なリファクタリングはできませんが、とりあえず、まともなJavaプログラムらしきものに書き直してみました。よく見て、学習してください。わかんないことは、質問してね。 (全角スペースを半角スペース2つに変えてからコンパイルして。) あなたが学ぶべきことは山ほどあるけど、たとえば、Swingのメインフレームそのもの(ここではJApplet)のpaint()をオーバライドしてはいけません。必ず、自作のパネルオブジェクトのためのクラス(ここではMyPanel)を書くこと。 ---------------------------------------------------- /* do appletviewer Rabu.java */ /* <applet code="Rabu" width="640" height="480"></applet> */ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Rabu extends JApplet {  Image bimg, img1, img2;  private JButton bNext, b1;  private MyPanel jContentPane = null;  private JPanel jPanel1;  int iStep;  public void init() {   bNext = new JButton("NEXT");   b1 = new JButton("ボタン1");   b1.setBounds(90, 400, 190, 40);   b1.addActionListener(new java.awt.event.ActionListener() {    public void actionPerformed(ActionEvent e){    }   });   jContentPane = new MyPanel();   jPanel1 = new JPanel();   jPanel1.setOpaque(false);   jPanel1.setLayout(null);   jPanel1.setBounds(0, 0, 640, 480);   jPanel1.add(b1);   // 画像の事前ロードを強制するために   // ImageIconのコンストラクタにMediaTrackerを   // ドライブさせる.   // そのままでは, 画像は実際にpaintされるとき   // やっとロードされるので, 最初はimg2をかなり待たされる.   ImageIcon ii1 = new ImageIcon    (img1 = getImage(getCodeBase(), "images/test.gif"));   ImageIcon ii2 = new ImageIcon    (img2 = getImage(getCodeBase(), "images/test2.gif"));   bimg = img1;   setContentPane(jContentPane);   bNext.setBounds(559, 0, 80, 40);   getContentPane().add(bNext);   bNext.addActionListener(new ActionListener(){    public void actionPerformed(java.awt.event.ActionEvent e) {     iStep++;     if (iStep % 2 != 0){      getContentPane().add(jPanel1);     }     else{      getContentPane().removeAll();      ((JPanel)(getContentPane())).revalidate();     }     bimg = (iStep % 2 == 0) ? img1 : img2;     jContentPane.repaint();     getContentPane().add(bNext);    }   });  }  class MyPanel extends JPanel{   public MyPanel(){    setPreferredSize(new Dimension(640, 480));    setLayout(null);   }   public void paintComponent(Graphics g){    super.paintComponent(g);    if (bimg != null){     g.drawImage(bimg, 0, 0, 640, 480, this);    }   }  } } ------------------------------------------

rabu_chihaha
質問者

お礼

早速の回答ありがとうございます。 教えていただいたソースで実行すると、思うとおりに動きました。 これから、このソースを元に、修正してみます。 本当に、はじめたばかりなので、これからがんばります。 また、わからなければ質問させていただきます。 ありがとうございました。

関連するQ&A

  • マウスイベントに合わせた動作を行いたい。

    いつもお世話になってます。 再びお願いします。 枠上か否かの判別はできるようになったのですが 動作が不安定というか意図し動作にならず困っております。 悩み疲れてよく分からなくなってきました(汗) 枠上だと判定した場合にはボーダーサイズを変更して、 枠の内部と判定した場合にはボーダーを含んだパネルを ドラッグの動きに合わせて移動したいのです。 どなたかどこを直せば良いのか分かりますでしょうか。 宜しくお願いいたします。 public class SampleButtonSize extends JFrame { private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JPanel jPanel = null; private Border jBdrPower = null; private JButton jButton = null; private JButton jButton1 = null; public Point pMus; private JPanel getJPanel() { if (jPanel == null) { jPanel = new JPanel(); jPanel.setLayout(null); jPanel.setBounds(new Rectangle(30, 25, 205, 98)); jPanel.setBorder(new TitledBorder( new EtchedBorder(), "Power" )); jPanel.add(getJButton(), null); jPanel.add(getJButton1(), null); jPanel.addMouseMotionListener(new java.awt.event.MouseMotionListener() { public void mouseDragged(java.awt.event.MouseEvent e) { MusX = e.getX(); MusY = e.getY(); inner = jBdrPower.getBorderInsets(jPanel); Dimension PnlSize = jPanel.getSize(); pMus = jPanel.getLocation(); if( MusX< inner.left || MusX> PnlSize.width - inner.right || MusY< inner.top || MusY> PnlSize.height - inner.bottom ) { // border の内側線よりも外:サイズ変更 jPanel.setSize(MusX, MusY); } else { // border の内側線よりも内:移動 jPanel.setLocation( pMus.x + MusX, pMus.y + MusY ); } } public void mouseMoved(java.awt.event.MouseEvent e) { } }); } return jPanel; } private JButton getJButton() { if (jButton == null) { jButton = new JButton(); jButton.setBounds(new Rectangle(16, 25, 82, 58)); } return jButton; } private JButton getJButton1() { if (jButton1 == null) { jButton1 = new JButton(); jButton1.setBounds(new Rectangle(115, 24, 77, 59)); } return jButton1; } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { SampleButtonSize thisClass = new SampleButtonSize(); thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); thisClass.setVisible(true); } }); } public SampleButtonSize() { super(); initialize(); } private void initialize() { this.setSize(300, 200); this.setContentPane(getJContentPane()); this.setTitle("JFrame"); } private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(getJPanel(), null); } return jContentPane; } }

    • ベストアンサー
    • Java
  • ボーダー上か否かの判定について

    いつもお世話になってます。 またお願いします。 画面上にパネルを配置して パネルに外枠を設定します。 その内部にボタンを2つ配置しました。 この設定した外枠をドラッグ&ドロップすることで パネル(外枠)のサイズを変更し、 外枠以外のパネル部分をドラッグ&ドロップすることで ボタンや外枠含むを含むパネル全体の移動を行いたいのです。 ★のところで枠上か否かを判定させれば良いのでしょうか? それとも他に方法がありますでしょうか? 宜しくお願いいたします。 public class SampleButtonSize extends JFrame { private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JPanel jPanel = null; private JButton jButton = null; private JButton jButton1 = null; public Point pMus; private JPanel getJPanel() { if (jPanel == null) { jPanel = new JPanel(); jPanel.setLayout(null); jPanel.setBounds(new Rectangle(30, 25, 205, 98)); jPanel.setBorder(new TitledBorder( new EtchedBorder(), "Power" )); jPanel.add(getJButton(), null); jPanel.add(getJButton1(), null); jPanel.addMouseMotionListener(new java.awt.event.MouseMotionListener() { public void mouseDragged(java.awt.event.MouseEvent e) { if( ★ ) { // 枠 pMus = jPanel.getLocation(); jPanel.setLocation(pMus.x + e.getX(), pMus.y + e.getY() ); } else { // 枠以外 jPanel.setSize(e.getX(), e.getY() ); } } public void mouseMoved(java.awt.event.MouseEvent e) { } }); } return jPanel; } private JButton getJButton() { if (jButton == null) { jButton = new JButton(); jButton.setBounds(new Rectangle(16, 25, 82, 58)); } return jButton; } private JButton getJButton1() { if (jButton1 == null) { jButton1 = new JButton(); jButton1.setBounds(new Rectangle(115, 24, 77, 59)); } return jButton1; } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { SampleButtonSize thisClass = new SampleButtonSize(); thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); thisClass.setVisible(true); } }); } public SampleButtonSize() { super(); initialize(); } private void initialize() { this.setSize(300, 200); this.setContentPane(getJContentPane()); this.setTitle("JFrame"); } private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(getJPanel(), null); } return jContentPane; } }

    • ベストアンサー
    • Java
  • jFrameを使って複数の画面を生成するにはどうすれば良いのでしょうか?

    eclipseのVE機能を使ってjFrameの画面生成を勉強しているのですが、 複数の画面を生成することができません。。 以下のソースで、ボタンが押された時に新しく画面を生成するように しているのですが、なぜか生成できません。エラーもありません。 何が足りなかったのか、悪かったのかを指摘していただけますでしょうか? import javax.swing.JPanel; import javax.swing.JFrame; import java.awt.GridBagLayout; import javax.swing.JButton; import java.awt.GridBagConstraints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class jFrameTest extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JButton jButton = null; /** * This is the default constructor */ public jFrameTest() { super(); initialize(); } /** * This method initializes this * * @return void */ private void initialize() { this.setSize(300, 200); this.setContentPane(getJContentPane()); this.setTitle("JFrame"); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { GridBagConstraints gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; jContentPane = new JPanel(); jContentPane.setLayout(new GridBagLayout()); jContentPane.add(getJButton(), gridBagConstraints); } return jContentPane; } /** * This method initializes jButton * * @return javax.swing.JButton */ private JButton getJButton() { if (jButton == null) { jButton = new JButton(); jButton.setText("jButton"); jButton.addActionListener(this); } return jButton; } //ボタン入力リスナー public void actionPerformed(ActionEvent event) { String cmd = event.getActionCommand(); if(cmd == "jButton"){ jFrameTest jtest = new jFrameTest(); System.out.println("new"); } } }

    • ベストアンサー
    • Java
  • ボタンが表示されず困ってます・・・。

    javaで「カップル」というトランプゲームを作っているのですが、背景色を設定する所までは行きましたが、表示されるはずのボタン(スタート、ランキング、ログアウト)が表示されず困っています・・・。 import java.awt.Color; import java.awt.Dimension; import java.awt.*; import javax.swing.*; import java.io.*; import javax.imageio.*; import java.awt.Graphics; import java.awt.Font; import javax.swing.JButton; import java.awt.Container; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.event.*; public class narabi2 extends JPanel{ JButton btn1,btn2,btn3; static Image img[] = new Image[52]; public static void main(String[] args) { JFrame f = new JFrame(); f.setSize(900,840); f.getContentPane().setBackground(new Color(0,100,0)); f.setDefaultCloseOperation(f.EXIT_ON_CLOSE); f.setResizable(true); f.setVisible(true); new narabi2(); } public narabi2(){ btn1 = new JButton("スタート"); this.add(btn1); btn1.addActionListener(new ev()); btn2 = new JButton("ランキング"); this.add(btn2); btn2.addActionListener(new ev()); btn3 = new JButton("ログアウト"); this.add(btn3); btn3.addActionListener(new ev()); JFrame f = new JFrame(); f.setSize(900,840); f.getContentPane().setBackground(new Color(0,100,0)); f.setDefaultCloseOperation(f.EXIT_ON_CLOSE); f.setResizable(true); f.setVisible(true); } public void paintComponent(Graphics g){ super.paintComponent(g); int i; int x = 0,y=0; for (i = 0; i < 52; i++) { g.drawImage(img[i], x, y, null); x = x + 100; if(x>=900){ x=0; y=y+140; } } } class ev implements ActionListener{ public void actionPerformed(ActionEvent m){ if(m.getSource()==btn1) //スタート { // 画像ファイルの読み込み int i, j; int no = 0; String c[] = {"s","h","c","d"}; try { for(i = 0; i < 4; i++) { for(j = 1; j <= 13; j++) { //String filename = "cards.png"; String filename = String.format("cards/%s%02d.png", c[i], j); img[no] = ImageIO.read(new File(filename)); no++; } } } catch(Exception e) { System.out.println(e); System.exit(0); } // シャッフル Image w; for (i = 51; i >= 0; i--) { j = (int)(Math.random() * (i + 1)); w = img[i]; img[i] = img[j]; img[j] = w; } } /*else if(m.getSource()==btn2) //ランキング { } else if(m.getSource()==btn3) //ログアウト { } } }*/ btn2,3はやらなくていい所です。更にはbtn1(スタート)が押されたときに、トランプ52枚が全て表示されるようにしたいのですが、ボタンが表示されないがため確認出来ておりません。 色々とご不便をお掛けしますが例などを挙げてもらえるととても助かります。宜しくお願い致します。  

  • GridBagLayoutについての質問

    ウィンドウ上のjContentPane上にJPanelを配置し、レイアウトをGridBagLayoutにしてそのJPanel上にJTextFieldを置くとそのJTextFieldの幅がほぼ0になります。下記のプログラムがその一部です。gridBagConstraints2.fill をnullにしたままJTextFieldの幅を広げたいのですがどうしたらいいでしょうか?教えてください。 private JPanel getJPanel() { if (jPanel == null) { GridBagConstraints gridBagConstraints2 = new GridBagConstraints(); jPanel = new JPanel(); jPanel.setLayout(new GridBagLayout()); jPanel.setPreferredSize(new java.awt.Dimension(200,150)); gridBagConstraints2.gridx = 0; gridBagConstraints2.gridy = 0; gridBagConstraints2.weightx = 1.0; gridBagConstraints2.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints2.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints2.gridwidth = 4; jPanel.add(getJTextField(), gridBagConstraints2); } return jPanel; } private JTextField getJTextField() { if (jTextField == null) { jTextField = new JTextField(); jTextField.setColumns(32); } return jTextField; }

    • ベストアンサー
    • Java
  • javaのJTextFieldにマウスフォーカス

    お世話になります。 Q1)下記のコードに於きまして、JTextFieldにマウスフォーカス が当りますと、その旨、System.out.println("JTextField_tt")と表示する方法をお教えください。 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.LineBorder; public class EObjectTest extends JFrame implements ActionListener { public static JButton b1; public static JButton b2; public static JTextField tt; static EObjectTest frame; public static void main(String args[]){ frame=new EObjectTest("AAAA"); frame.setVisible(true); } EObjectTest(String title) { setTitle(title); setBounds(100, 100, 300, 250); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p = new JPanel(); // ボタン作成・追加 b1 = new JButton("One"); b2 = new JButton("Two"); tt = new JTextField("aaa"); LineBorder border = new LineBorder(Color.RED, 2, true); tt.setBorder(border); tt.setColumns(15); p.add(b1); p.add(b2); p.add(tt); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); // リスナ登録 b1.addActionListener(this); b2.addActionListener(this); tt.addActionListener(this); } public void actionPerformed(ActionEvent e) { // getSource() でイベントソースのオブジェクトを獲得し // Button クラスにキャストする JButton b = (JButton)e.getSource(); // JTextField ttt = (JTextField)e.getSource(); if (b==b1) { System.out.println("Oneのボタン"); } if (b==b2) { System.out.println("Twoのボタン"); } /* if (ttt==tt) { System.out.println("JTextField_tt"); } */ } } 以上

    • ベストアンサー
    • 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
  • javaでストップウォッチが上手く作れません

    あるサイトを参考にして作ってみたんですが うまく動いてくれません、多分おかしいところだらけですが どこがダメか教えてもらえるとありがたいです package timeP; import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.EmptyBorder; public class timeC extends JFrame implements Runnable { private JPanel contentPane; private JTextField textField; private Thread th = null; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { timeC frame = new timeC(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public timeC() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 85); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS)); JPanel panel_3 = new JPanel(); contentPane.add(panel_3); panel_3.setLayout(new BorderLayout(0, 0)); textField = new JTextField(); panel_3.add(textField, BorderLayout.CENTER); textField.setColumns(10); JPanel panel_2 = new JPanel(); contentPane.add(panel_2); panel_2.setLayout(new BorderLayout(0, 0)); JButton JButtonstart = new JButton(" 開始 "); JButtonstart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if ( th == null ) { th = new Thread ( ); th.start(); } } }); panel_2.add(JButtonstart, BorderLayout.CENTER); JPanel panel_1 = new JPanel(); contentPane.add(panel_1); panel_1.setLayout(new BorderLayout(0, 0)); JButton JButtonstop = new JButton(" 停止 "); JButtonstop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if ( th != null ){ th = null; } } }); panel_1.add(JButtonstop, BorderLayout.CENTER); JPanel panel = new JPanel(); contentPane.add(panel); panel.setLayout(new BorderLayout(0, 0)); JButton btnNewButton_2 = new JButton("New button"); panel.add(btnNewButton_2, BorderLayout.CENTER); } @Override public void run() { //TODO 自動生成されたメソッド・スタブ int i; while ( th != null ){ i = Integer.parseInt( textField.getText() ); try { Thread.sleep(10000); if ( th == null ) break; } catch ( InterruptedException e ){ break; } textField.setText( Integer.toString( i + 1 ) ); } } }

  • コミュニケーション支援用の画面を作っております

    コミュニケーション画面を作っています。記号絵の表示です。絵で書いた紙を使っていましたが、かける絵が少なく、小さい表示しかできず不便を感じております。自分で次の紙をめくるのも手足が不自由で苦労しております。タブを付け、画面を表示したり、数個のボタンで絵記号を選ぶようにしたいです。(1)画面の北面に記号が意味する説明を表示し、中面には絵記号を並べ、南面には画面を押すたびに絵記号と説明が切り替わるようにしようとしています。(2)また、動作や物、人など分野別にインデックスを付け、そのインデックスも南面にのボタンで切り替わるようにしたいです。(1)間ではできたのですが、タブ(インデックス)上に(1)を置く方法がどうしても解りません。またタブをボタンで切り替える事もできません。コードは以下です。お詳しい方がおられましたら教えてください。 import javax.swing.*; import java.awt.CardLayout; import java.awt.BorderLayout; import java.awt.event.*; public class ekigou2 extends JFrame implements ActionListener{ JPanel cardPanel; JPanel cardPanel2; CardLayout layout; public static void main(String[] args){ ekigou2 frame = new ekigou2(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 200); frame.setTitle("タイトル"); frame.setVisible(true); } ekigou2(){ JTabbedPane tabbedpane = new JTabbedPane(); //tubb_on_panel JPanel tabPanel1 = new JPanel(); JPanel tabPanel2 = new JPanel(); //tabb_image ImageIcon tbicon1 = new ImageIcon("./img/post.gif"); ImageIcon tbicon2 = new ImageIcon("./img/mail.gif"); //tab_set tabbedpane.addTab("tab1", tbicon1, tabPanel1); tabbedpane.addTab("tab2", tbicon2, tabPanel2); tabbedpane.setIconAt(1, tbicon1); tabbedpane.setIconAt(1, tbicon2); //card_icon_image ImageIcon cardicon1 = new ImageIcon("./img/dousa/203025行く.jpg"); ImageIcon cardicon2 = new ImageIcon("./img/dousa/203026来る.jpg"); //smol_icon_image ImageIcon icon1s = new ImageIcon("./img/dousa/203025行くs.jpg"); ImageIcon icon2s = new ImageIcon("./img/dousa/203026来るs.jpg"); // card_icon_roop JPanel card1 = new JPanel(); card1.add(new JButton("行く",cardicon1)); JPanel card2 = new JPanel(); card2.add(new JButton("来る",cardicon2)); cardPanel = new JPanel(); layout = new CardLayout(); cardPanel.setLayout(layout); cardPanel.add(card1, "button1"); cardPanel.add(card2, "button2"); // smol_icon_switch JButton button1 = new JButton("行く",icon1s); button1.addActionListener(this); button1.setActionCommand("button1"); JButton button2 = new JButton("来る",icon2s); button2.addActionListener(this); button2.setActionCommand("button2"); //小さいボタンを乗せる JPanel btnPanel = new JPanel(); btnPanel.add(button1); btnPanel.add(button2); JButton nextButton = new JButton("Next"); nextButton.addActionListener(this); nextButton.setActionCommand("Next"); JPanel btnPanel2 = new JPanel(); btnPanel2.add(nextButton); getContentPane().add(cardPanel, BorderLayout.NORTH);//card_button getContentPane().add(btnPanel, BorderLayout.WEST);//smol_button getContentPane().add(btnPanel2, BorderLayout.PAGE_END);//next_button getContentPane().add(tabbedpane);//tub_panel } public void actionPerformed(ActionEvent e){ String cmd = e.getActionCommand(); if (cmd.equals("Next")){ layout.next(cardPanel); } String cmd2 = e.getActionCommand(); layout.show(cardPanel, cmd2); } }

    • ベストアンサー
    • Java
  • 別ウインドウに画像と文字を表示しない

     こんにちは。  ボタンをクリックすると、別ウインドウが開いて、画像と文字が表示される アプレットを作りたいのですが、別ウインドウは開きますが、画像と文字は 表示されません。  何度考えても、全く原因が分かりません。  皆さんのご教示宜しくお願いします。 ================================================================================ 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.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( ) { 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 ) ; } } } ================================================================================

    • ベストアンサー
    • Java

専門家に質問してみよう