Jlabel?の上に2つ画像を載せクリックを識別

このQ&Aのポイント
  • JLabelを使用して、画面に背景色に薄い赤を指定し、2つの矢印画像を表示します。また、矢印の中央に年月を表示します。
  • 右の矢印をクリックすると、翌月の年月が表示され、左の矢印をクリックすると、前月の年月が表示されます。
  • Swingでこの機能を完成させるために、各コンポーネントはsetBoundsメソッドで配置できます。
回答を見る
  • ベストアンサー

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つのテキストしか表示できません。

  • 39OK
  • お礼率9% (35/359)
  • Java
  • 回答数1
  • ありがとう数3

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

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

その作り方では破綻します。 コンポーネントは次のようにわけてください。 年月の表示 左矢印 右矢印 上記を格納するコンテナ プログラムを作るのと平行してオブジェクト指向も勉強してください。 また、MVCの考え方も理解しておくといいと思います。 SwingはMVCになっているので参考になると思います。

関連するQ&A

  • マウスカーソルを指定の画像を用いて変更するには?

    Javaアプレット上に表示されるマウスカーソルの変更方法についての質問です。 setCursorメソッドを用いての予め用意されたカーソルに変更するのではなく、特定の画像を使用してマウスカーソルを変更したいのですがどうすれば良いでしょうか? 自分では以下の様に試してみたのですがマウスカーソルは変更されませんでした。 JLabel label = new JLabel(); ImageIcon icon = new ImageIcon("image/icon.gif"); label.setIcon(icon); できればメソッド名だけでなく簡単なサンプルをつけて頂けると幸いです。 皆様宜しくお願い致しますm(_ _)m

    • ベストアンサー
    • 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
  • ボタンクリック後パネルを再描画repaintしたい

    ボタンをクリック後にstaticで保持していた値にプラス1して その値をパネルに再描画したいと思っています。 下記のプログラムだとボタンをクリックすると (<1<2<3<4)となって画像と数字が増えてしまいます 行いたいのは数字の部分だけが再描画されて カウントされて<3と表示されるだけになってもらいたい クラス1つ目 import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.event.MouseEvent; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Sample extends JFrame{ static int value=1; JPanel work = new JPanel(); public static void main(String[] args) { Sample frame = new Sample(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(100, 200, 200, 100); frame.add(frame.createPanel(), BorderLayout.LINE_END); frame.setVisible(true); } public JPanel createPanel() { ImageIcon icon = new ImageIcon("./img/left.gif"); JLabel label = new JLabel(); Cursor c = new Cursor(Cursor.HAND_CURSOR); label.setCursor(c); label.setIcon(icon); JLabel strLabel = new JLabel(); String str = Integer.toString(value); strLabel.setText(str); work.add(label); work.add(strLabel); label.addMouseListener(new myListener()); return work; } class myListener extends MouseAdapter{ public void mouseClicked(MouseEvent e){ System.out.print(Sample.value++); createPanel().repaint(); setVisible(true); } } } クラス2つ目 import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class MouseAdapter implements MouseListener{ public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} }

    • ベストアンサー
    • Java
  • Eclipseから実行すると画像が読み込まれない

    下記のコードをEclipseから実行すると画像が読み込まれないのですが、コマンドプロンプトから実行すると画像が読み込まれます。 コードが同じなのに不思議です…。 原因はどんなことが考えられるのでしょうか? class test extends JFrame{ public static void main(String args[]){ test frame = new test("タイトル"); frame.setVisible(true); } test(String title){ setTitle(title); setBounds(100, 100, 500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p = new JPanel(); ImageIcon icon1 = new ImageIcon("img.jpg"); JLabel label1 = new JLabel(icon1); p.add(label1); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); } }

    • ベストアンサー
    • Java
  • 画像がうまく切り替わらない

    画像がうまく切り替わらない 初心者なため、上記の通りうまく画像を切り替えることができません。 わかる方、申し訳ありませんがご協力お願いいたします。 QUIZフォルダにあるQ1.jpg~Q80.jpgまでの画像を問題文として使った、4択のクイズ形式のプログラムを作成しています。 このプログラムなのですが、1問目と2問目はうまく表示されますが、3問目から画像が切り替わらなくなってしまっています。 swingを使い、以下のような内容でJPanel pにQ80.jpgまで切り替えていこうとしていました。 p.remove(5); ImageIcon icon1 = new ImageIcon("./QUIZ/Q2.jpg"); JLabel label1 = new JLabel(icon1); p.add(label1); new ImageIconを使いすぎなのが原因かとも思っているのですが、どのように直していいものかわからないため、ご指導お願いします。

    • ベストアンサー
    • Java
  • setIcon() の反対のようなものを探しています。

    こんばんは。GUIで、一秒ごとに画像を切り替える、スライドショーのようなものを作ってみたのですが、画像が切り替わらず、画像の上に画像が配置され、どんどん積み重なっていく感じになりました。以下がそのコードです。 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class IconChange extends JFrame{ private Timer timer; private JLabel img; private int sec; private Icon[] icon=new ImageIcon[11]; private JPanel pane; public static void main(String[] args){ IconChange frame=new IconChange("画像チェンジ"); frame.pack(); frame.setDefaultCloseOperation(3); frame.setVisible(true); } public IconChange(String title){ super(title); sec = 0; pane=(JPanel)getContentPane(); pane.setPreferredSize(new Dimension(800,600)); pane.setOpaque(true); pane.setBackground(new Color(0x00000000, true)); img=new JLabel(new ImageIcon("images2/1.jpg")); pane.add(img); for(int i=0;i<=10;i++){ icon[i]=new ImageIcon("images2/"+i+".png"); } timer = new Timer(1000 , new Kirikae()); timer.start(); } class Kirikae implements ActionListener{ public void actionPerformed(ActionEvent e){ img.setIcon(icon[sec]); if(sec>=10){sec=0;} sec++; } } } JLabelに画像をセットしたら、前の画像と入れ替わり新しい画像がセットされるとおもったのですが、前の画像が残ったまま新しい画像がセットされます。新しい画像をセットする前に前の画像のセットを取り消したいのですが、いい方法がございましたらアドバイスお願いいたします。

    • ベストアンサー
    • Java
  • Javaのプログラミング手伝ってください

    以下のソースコードを応用して、添付画像のような数字のかかれた画像を3つ並べてそれを回して7を揃えるというゲームを作りたいのですが全く進みません。どなたか完成させてくださいm(__)m使用する画像のファイル名は「slot1.jpeg」~「slot7.jpeg」です。 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.Timer; public class OneSlot extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; final int MAX = 7; Timer timer = new Timer(150 , this); JLabel label= new JLabel("スタートで始まるよ",JLabel.CENTER); JButton[] bt = {new JButton("スタート"),new JButton("ストップ")}; JLabel slot= new JLabel(new ImageIcon("Slot1.jpg"),JLabel.CENTER); ImageIcon[] slot_icon = new ImageIcon[MAX]; int iCount = 0; OneSlot(String title) { super(title); timer.setActionCommand("timer"); setBounds(200, 200, 230, 150); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); for(int i = 0;i < slot_icon.length; i++) slot_icon[i] = new ImageIcon("Slot" + (i+1) + ".jpg"); add("North",label); add("Center",slot); JPanel p = new JPanel(); for (int i = 0; i < bt.length;i++) { bt[i].addActionListener(this); p.add(bt[i]); } add("South",p); setVisible(true); } public static void main(String[] args) { new OneSlot("スロットマシン"); } public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); if(cmd.equals("timer")) { if(++iCount == slot_icon.length) iCount = 0; slot.setIcon(slot_icon[iCount]); } if(e.getSource() == bt[0] && !timer.isRunning()) { label.setText("7が当たりだよ"); timer.start(); } else if(e.getSource() == bt[1] && timer.isRunning()) { if(iCount+1 == MAX) label.setText("やった!!おめでとう"); else label.setText("残念でした"); timer.stop(); } } }

  • Jave Swing 画像表示わからない

    java swingでGUIをプログラミングしている者です。 JLabelにImageIconの画像を貼り付けるプログラムです。↓ //画像を表示するプログラム //インポート import javax.swing.*; import java.awt.*; import java.awt.event.*; class gazopro extends JFrame{ JLabel l1; JButton b1; JPanel p; public static void main(String args[]) { //ウィンドウを作成また設定 gazopro frame = new gazopro(); frame.setBounds(300,200,700,400); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } gazopro(){ //コンポーネントを作成 p = new JPanel(); add(p); b1 = new JButton("画像を表示"); p.add(b1); ImageIcon icon = new ImageIcon("image.jpg"); l1 = new JLabel(icon); p.add(l1); } }   わからないところは、ImageIcon icon = new ImageIcon("image.jpg");のところです。 ImageIconの引数は、プログラミングを行っているパソコン(OS は Windows)のマイコンピューター→ Cドライブ→ MyJava→ image.jpgを指定しましたがこれで合ってますか? このプログラムでは、画像が表示されませんでした。 どうすればいいでしょうか? 解説と、ご指導宜しくお願いします。

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

    画像のRGBヒストグラムを表示するプログラムを以下のように作りました。 import java.awt.*; import java.awt.event.*; import java.awt.image.*; import javax.swing.*; import javax.swing.ImageIcon; import java.io.*; class RGBMain{ public static void main(String argv[]){ JFrame f=new JFrame("画像とそのヒストグラム"); JPanel p1=new JPanel(); JPanel p2=new JPanel(); JPanel p3=new JPanel(); JLabel l1=new JLabel("input photo"); JLabel l2=new JLabel(); JTextField tf=new JTextField(15); JButton b1=new JButton("open"); JButton b2=new JButton("start"); LoadFile lf=new LoadFile(tf, l2, p2); ShowHist sh=new ShowHist(tf, p3); tf.addKeyListener(lf); b1.addActionListener(lf); b2.addActionListener(sh); p1.add(l1); p1.add(tf); p1.add(b1); p1.add(b2); p2.add(l2); f.setDefaultCloseOperation(f.EXIT_ON_CLOSE); f.getContentPane().add(p1,BorderLayout.NORTH); f.getContentPane().add(p2,BorderLayout.WEST); f.getContentPane().add(p3,BorderLayout.EAST); f.setSize(800, 500); f.setVisible(true); } } class LoadFile implements ActionListener, KeyListener{ JTextField textField; JLabel label; JPanel panel; public LoadFile(JTextField Textfield, JLabel lbl, JPanel pnl){ textField=Textfield; label=lbl; panel=pnl; } public void actionPerformed(ActionEvent e){ if(getClass().getResource(textField.getText())==null) label.setText("ファイルが見つかりません。"); else{ ImageIcon imgicon=new ImageIcon(getClass().getResource(textField.getText())); label.setIcon(imgicon); } label.repaint(); panel.repaint(); } public void keyTyped(KeyEvent e){ if(e.getKeyCode()==e.VK_ENTER){ if(getClass().getResource(textField.getText())==null) label.setText("ファイルが見つかりません。"); else{ ImageIcon imgicon=new ImageIcon(getClass().getResource(textField.getText())); label.setIcon(imgicon); } label.repaint(); panel.repaint(); } } public void keyPressed(KeyEvent e){ } public void keyReleased(KeyEvent e){ } } class ShowHist implements ActionListener{ JTextField textField; JPanel p; public ShowHist(JTextField Textfield, JPanel pnl){ textField=Textfield; p=pnl; } public void actionPerformed(ActionEvent e){ try{ File f=new File(textField.getText()); BufferedImage bi=javax.imageio.ImageIO.read(f); int rgb; int[] rhist=new int[16]; int[] ghist=new int[16]; int[] bhist=new int[16]; int re, gr, bl; int width=bi.getWidth()/3*2/16; for(int y=0;y<=bi.getHeight();y++){ for(int x=0;x<=bi.getWidth();x++){ rgb=bi.getRGB(x, y); bl=rgb%256; gr=bl%256; re=gr%256; rhist[re/16]++; ghist[gr/16]++; bhist[bl/16]++; } } Graphics g=p.getGraphics(); g.setColor(Color.red); int i; int xx=0; for(i=0;i<16;i++){ g.fillRect(xx, bi.getHeight()/3, width, bi.getHeight()/3*(rhist[i]/(bi.getWidth()*bi.getHeight()))); xx+=width; } g.setColor(Color.green); xx=0; for(i=0;i<16;i++){ g.fillRect(xx, bi.getHeight()/3*2, width, bi.getHeight()/3*(ghist[i]/(bi.getWidth()*bi.getHeight()))); xx+=width; } g.setColor(Color.green); xx=0; for(i=0;i<16;i++){ g.fillRect(xx, bi.getHeight()/3*3, width, bi.getHeight()/3*(bhist[i]/(bi.getWidth()*bi.getHeight()))); xx+=width; } p.repaint(); }catch(IOException ex){ ex.printStackTrace(); } } } コンパイルは問題なく通り、 実行すると、ウィンドウは表示されるのですが、ファイル名を入力して openボタンをクリックしてもなにも反応がありません。特に例外も発生していないようなのですが、なぜでしょうか。 ちなみに、画像ファイル名はtrain.jpgで、javaソースファイル、各classファイルと同じディレクトリに置いています。 どなたかよろしくお願いします。

  • スクロール表示

    お願いします。 初めてswingに挑戦中なのですが・・・ tableをスクロール表示させたいのですがどうしてもできません。どうしたらよいでしょうか?教えてください import java.lang.*; import javax.swing.*; import javax.swing.table.*; import java.awt.*; public class SwingTableApp extends JFrame { public JTable table; public JLabel label; public SwingTableApp(String[][] data) { super("parallel Machine Scheduling"); setLocation(50,50); setSize(400,700); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(null); DefaultTableModel tableModel = new DefaultTableModel(); for(int k=0; k<data[0].length; k++){ tableModel.addColumn("TEST"); }//列の設定 for(int j=0; j<data.length; j++){ tableModel.addRow(data[j]); }//行の設定 table = new JTable(tableModel); table.setLocation(10,10); table.setSize(2000,200); getContentPane().add(table); label = new JLabel("目的関数"); label.setLocation(10,210); label.setSize(100,25); getContentPane().add(label); } }

    • ベストアンサー
    • Java

専門家に質問してみよう