2012-05-02 83 views
0

私はJLabels配列を作成します。配列はJavaの[9] [9]です。これらのラベルをマウスでクリックしたときにこれらを表示するように設定したいと考えています(JLabels)。誰でも私を助けることができますか?JLabel配列(Java)をマウスでクリック

I tried this: 
    //labels[c][d].addMouseListener(null); 
    public void mouseClicked(MouseEvent me){ 
    //  for(Integer i=1;i<10;i++) 
    //  { 
    //   for(Integer j=1;j<10;j++) 
    //   { 
    //    
    //    if (me.getSource()==labels[i][j]); 
    //    { 
    //     
    //     labels[1][1].setVisible(true); 
    //    } 
    //   } 
    //  
    // } 
+0

編集[OK]を –

+0

を試してみましたコードとの質問に、私は「ので、初心者:) – ademcu

答えて

3

Swing JToolbarButton pressingに示すようにJToggleButtonを使用してください。あなたのユースケースにおいて

、緑色選択されていない画像は、単に完全に透明画像、または所望のBGの色である画像のいずれかであろう。

例えば

より具体:

Toggle Image

import java.awt.*; 
import java.awt.image.*; 
import javax.swing.*; 

class ToggleImage { 

    public static JToggleButton getButton(
     Image selected, 
     Image unselected) { 

     JToggleButton b = new JToggleButton(); 
     b.setSelectedIcon(new ImageIcon(selected)); 
     b.setIcon(new ImageIcon(unselected)); 
     b.setBorderPainted(false); 
     b.setContentAreaFilled(false); 
     b.setFocusPainted(false); 
     b.setMargin(new Insets(0,0,0,0)); 

     return b; 
    } 

    public static Image getImage(boolean hasSquare) { 
     int size = 60; 
     BufferedImage bi = new BufferedImage(
      size,size,BufferedImage.TYPE_INT_ARGB); 
     Graphics2D g = bi.createGraphics(); 

     if (hasSquare) { 
      g.setColor(Color.RED); 
      g.fillRect(1,1,size-2,size-2); 
     } 

     g.dispose(); 
     return bi; 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       Image selected = getImage(true); 
       Image unselected = getImage(false); 

       int row = 2; 
       int col = 5; 
       JPanel p = new JPanel(new GridLayout(row,col)); 

       for (int ii=0; ii<row*col; ii++) { 
        p.add(getButton(selected, unselected)); 
       } 

       JOptionPane.showMessageDialog(null, p); 
      } 
     }); 
    } 
} 

ボタンラベルがないであろう(デフォルト)に対し、マウスおよびキーボード入力の両方に反応することに注意してください。

2

これらのJLabelがすべて最初から目に見えない場合、マウス/キーイベントを捕捉することはできません。あなたが投稿

public static void main (String[] args) 
{ 
    JFrame frame = new JFrame(); 
    frame.setLayout (new GridLayout (9, 9)); 
    frame.getContentPane().setPreferredSize (new Dimension (300, 300)); 

    final Random random = new Random(); 
    for (int i = 0; i < 9; i++) 
    { 
     for (int j = 0; j < 9; j++) 
     { 
      final JLabel label = new JLabel ("", JLabel.CENTER); 
      label.setBorder (BorderFactory.createLineBorder (Color.LIGHT_GRAY)); 
      label.addMouseListener (new MouseAdapter() 
      { 
       public void mousePressed (MouseEvent e) 
       { 
        label.setText ("" + random.nextInt (100)); 
       } 
      }); 
      frame.add (label); 
     } 
    } 

    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
    frame.setLocationRelativeTo (null); 
    frame.setVisible (true); 
} 
+0

私はJLabelの配列を作成メートル。それは91のラベルがあることを意味します。これはどうですか? – ademcu

+0

まず、91ではなく81(9 * 9 = 81)。 2つ目は、作成したすべてのJLabelを私のサンプルからいくつかの配列に簡単に保存することです。例題にいくつかの配列を追加するのは意味がありませんでした。なぜなら、問題は可視性ではなく可視性であるからです。 –

2

コードが悪いように見えるしません: - あなただけそれらをクリックした後、コンテンツのラベルを表示したい場合、彼らはこのように、クリックを受け取る前に、ちょうど彼らのテキストを設定しないでください。しかし、[i][j]ではなく、常にインデックス[1][1]のラベルを表示します。

もちろん、あなたのJLabelが本当にMouseEventのソースである場合は、ループ機構のすべての警告機能を無効にすることができます。あなたが目に見えるに設定する必要のあるラベルを決定するために

me.getSource()==labels[i][j] 

を使用している場合、私はこのことができます願ってい

((JLabel)me.getSource()).setVisible(true); 
2

によって、全体の二重ループを置き換えることができます。

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class Clicker extends JPanel { 
    private static final int ROWS = 9; 
    private static final int COLUMNS = 9; 

    public Clicker() { 
     setLayout(new GridLayout(COLUMNS, ROWS)); 

     JLabel labels[][] = new JLabel[ROWS][]; 
     for (int i = 0; i < ROWS; i++) { 
      labels[i] = new JLabel[COLUMNS];  
     } 

     for (int i = 0; i < ROWS; i++) { 
      for (int j = 0; j < COLUMNS; j++) { 
       labels[i][j] = new JLabel(); 
       labels[i][j].addMouseListener(createMouseListener()); 
       add(labels[i][j]); 
      } 
     } 
    } 

    public MouseAdapter createMouseListener() { 
     return new MouseAdapter() { 
      @Override 
      public void mousePressed(MouseEvent e) { 
       JLabel label = (JLabel)e.getSource(); 

       if (!label.isEnabled()) { 
        label.setText(""); 
        label.setEnabled(true); 
       } else { 
        label.setText("Clicked"); 
        label.setEnabled(false); 
       } 
      } 
     }; 
    } 


    public static void main(String[] args) { 
     JFrame frame = new JFrame("Click me demo."); 
     frame.setSize(500, 500); 
     frame.setLayout(new BorderLayout()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new Clicker(),BorderLayout.CENTER); 
     frame.setVisible(true); 
    } 
} 
+1

'COLUMBS' - >' COLUMNS';) –

関連する問題