摆动 - 获取组件点击的JPanel(swing - get component clicked o

2019-09-17 01:30发布

行,所以我有一个GridLayout的一个JPanel。 网格的每个单元则包含其他的JPanel。

我希望能够做的是对“下面”的JPanel监听器,然后告诉我其中的“叠加” JPanels的被点击 - 这样我就可以把它和周围的人反应过来,未做覆盖JPanels清楚自己的定位(他们改变!)

是否有这样做的一种方式-类似确定点击JPanel组件中的MouseListener。 事件处理 ,但我找不到在上面抓组件的方式。

我大概可以抢共同oridnates并使用该信息工作了 - 但我宁愿不要!

任何帮助/指针/提示,将不胜感激:d

Answer 1:

做同样的事情,但使用getParent()的来源。 或者,您可以搜索最多的层次,如果它是更深层次的,甚至对于一些辅助方法: javax.swing.SwingUtilities.getAncestorOfClassgetAncestorNamed



Answer 2:

使用putClientProperty / getClientProperty ,没有什么简单的身边......,你可以把ClientProperty无尽的号码给一个对象

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;

public class MyGridLayout {

    public MyGridLayout() {
        JPanel bPanel = new JPanel();
        bPanel.setLayout(new GridLayout(10, 10, 2, 2));
        for (int row = 0; row < 10; row++) {
            for (int col = 0; col < 10; col++) {
                JPanel b = new JPanel();
                System.out.println("(" + row + ", " + col + ")");
                b.putClientProperty("column", row);
                b.putClientProperty("row", col);
                b.addMouseListener(new MouseAdapter() {

                    @Override
                    public void mouseClicked(MouseEvent e) {
                        JPanel btn = (JPanel) e.getSource();
                        System.out.println("clicked column " + btn.getClientProperty("column")
                                + ", row " + btn.getClientProperty("row"));
                    }
                });
                b.setBorder(new LineBorder(Color.blue, 1));
                bPanel.add(b);
            }
        }
        JFrame frame = new JFrame("PutClientProperty Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(bPanel);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                MyGridLayout myGridLayout = new MyGridLayout();
            }
        });
    }
}


文章来源: swing - get component clicked on JPanel