我正在尝试在网格布局中使用JLabel实现一个小网框。 我们的想法是,当您单击特定框时,控制台窗口上会显示X和Y坐标。到目前为止我有这个,我相信它几乎就在那里,但是当我点击每个盒子时,窗口中出现的数字不正确。例如,当我点击应该读取的框(0,0)时,它给了我16,17 ...... ???任何帮助都会很棒!感谢。
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){}
}
}
答案 0 :(得分:2)
我正在尝试使用网格中的JLabel实现一个小网格框 布局。这个想法是当你点击一个特定的盒子X和Y. 坐标显示在控制台窗口上。到目前为止我有这个 而且我相信它几乎就在那里,但是当我点击每个盒子时 窗口中出现错误的数字
最简单的方法是使用put/getClientProperty
答案 1 :(得分:2)
您需要在for循环中迭代JLabel数组,以查找按下的标签的索引号。然后使用该索引号和一些简单的数学运算(mod和int除法),使用网格尺寸来确定合适的网格位置。