2013-10-07 151 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坐标在控制台窗口上显示出来。我有这个迄今为止 ,我相信这是几乎没有,但是当我点击每个框 不正确数字出现在窗口