gpt4 book ai didi

java - 通过单击 JPanel 获取 JPanel[][] 坐标

转载 作者:行者123 更新时间:2023-11-30 03:24:30 25 4
gpt4 key购买 nike

我创建了一个 JPanel[][] 数组。

private JPanel[][] pnlFeld;

并用面板填充它

for (int i = 0; i < world.getSize(); i++) {
for (int j = 0; j < world.getSize(); j++) {
pnlFeld[i][j] = new JPanel();
pnlFeld[i][j].setBorder(new EtchedBorder());
pnlFeld[i][j].addMouseListener(ml);
pnlFeld[i][j].setBackground(off);
add(pnlFeld[i][j]);
}
}

现在我想通过点击数组坐标([][])来获取它们,但我不知道如何做到这一点。

我只添加了更改我单击的面板颜色的方法,与我的问题无关。

MouseListener ml = new MouseListener() {

@Override
public void mouseEntered(MouseEvent e) {
if (world.getMode().equals("Malen")) {
if (e.getSource() instanceof JPanel)
e.getComponent().setBackground(on);
// check();
}
else if (world.getMode().equals("Radieren")) {
if (e.getSource() instanceof JPanel)
e.getComponent().setBackground(off);
// check();
}
}

@Override
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
if (world.getMode().equals("Setzen")) {
if (e.getSource() instanceof JPanel) {
if (e.getComponent().getBackground() == off) {
e.getComponent().setBackground(on);
} else
e.getComponent().setBackground(off);
}
// check();
}
}
}

@Override
public void mouseClicked(MouseEvent e) {}

@Override
public void mouseExited(MouseEvent e) {}

@Override
public void mouseReleased(MouseEvent e) {}
};

最佳答案

实际上你可以使用 getBounds() 来获取组件的位置和大小。如果您指的是数组索引,则可能有多种解决方案。

  1. 定义一个 map 并将所有面板放入 map 中,并使用字符串值,例如i+":"+j (或定义具有 2 个字段 i 和 j 的简单 pojo 类。

  2. 为每个 JPanel 创建唯一的监听器以保留 i 和 j。

  3. 将面板放入带有 GridBagLayout 的容器中,然后您可以使用 gridBagLayoutInstance.getConstraints(theClickedPanel) 并检查约束的行列

关于java - 通过单击 JPanel 获取 JPanel[][] 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30592904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com