首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过单击JPanel获取JPanel[][]坐标

通过单击JPanel获取JPanel[][]坐标
EN

Stack Overflow用户
提问于 2015-06-02 17:59:05
回答 4查看 154关注 0票数 1

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

代码语言:javascript
复制
private JPanel[][] pnlFeld;

装满了电池板

代码语言:javascript
复制
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]);
        }
    }

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

我只是添加了一些方法来改变我点击的面板的颜色,与我的问题无关。

代码语言:javascript
复制
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) {}
    };
EN

回答 4

Stack Overflow用户

发布于 2015-06-02 18:28:33

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

  1. 定义地图并使用字符串值将所有面板放置在地图中,例如i+":"+j (或使用2个字段i和j定义简单的pojo类。
  2. 为每个JPanel创建唯一的侦听器以保留i和j。
  3. 使用GridBagLayout将面板放置在容器中,然后可以使用constraint并检查constraint

的行列

票数 1
EN

Stack Overflow用户

发布于 2015-06-02 19:11:14

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

使用带有ActionListenerJButton[][]可以更轻松地编码并获得更好的用户体验。ActionEvent有一个getSource()方法,它将标识被激活的按钮。

这个chess GUI对棋盘上的64个位置使用按钮。

票数 1
EN

Stack Overflow用户

发布于 2015-06-02 18:23:31

如果在循环中创建MouseListener,则可以在侦听器的代码中使用i en j。缺点是你会有更多的监听器实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30592904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档