2013-10-07 191 views
1

我正在嘗試在網格佈局中使用JLabels實現一個小網格框。 這個想法是,當你點擊一個特定的框時,X和Y座標在控制檯窗口上顯示。我有這個到目前爲止,我相信它幾乎在那裏,但是當我點擊每個框不正確的數字出現在窗口中。例如,當我點擊應讀取的框(0,0)時,它會給我16,17 ...?任何幫助將是偉大的!謝謝。網格X和Y座標中的可點擊JLabels?

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridLayout; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 

import javax.swing.*; 


public class GridPanel extends JPanel{ 

private final int HEIGHT = 7; 
private final int WIDTH = 12; 
private final int TOTAL_BOXES = HEIGHT * WIDTH; 
JLabel box[]; 

public GridPanel() 
{ 
    setLayout(new GridLayout(7,12)); 


    box = new JLabel[TOTAL_BOXES]; 

     for (int x = 0;x<box.length;x++){ 

      box[x] = new JLabel(""); 
      box[x].setOpaque(true); 
      box[x].setPreferredSize(new Dimension(30,30)); 
      box[x].setBackground(Color.white); 
      box[x].setBorder(BorderFactory.createLineBorder(Color.black)); 
      box[x].addMouseListener(new mListener()); 
     } 


     for (int x = 0;x<box.length;x++) 
      add(box[x]); 

} 


private class mListener implements MouseListener 
{ 

    public void mouseClicked(MouseEvent box) 
    { 
     int x = box.getX(); 
     int y = box.getY(); 
     System.out.println(x +"," + y); 
    } 

    public void mousePressed (MouseEvent e){} 
    public void mouseExited (MouseEvent e){} 
    public void mouseReleased (MouseEvent e){} 
    public void mouseEntered (MouseEvent e){} 


} 

} 

回答

2

你會想通過你的JLabel陣列中的迭代for循環找到被按下的標籤的索引號。然後使用該索引號和一些簡單的數學運算(mod和int division)來使用網格尺寸來找出適當的網格位置。

2

我想實現的使用的JLabel在網格 佈局盒小格子。這個想法是,當你點擊一個特定的框時,X和Y座標在控制檯窗口上顯示出來。我有這個迄今爲止 ,我相信這是幾乎沒有,但是當我點擊每個框 不正確數字出現在窗口