getX()& getY()MotionListener

时间:2013-05-08 13:31:37

标签: java awt

我正在搜索从包含案例的棋盘获取坐标x / y! 我实际使用System.out.println来获取它,但这不是好方法...... 我需要从方法getX()和getY()获取这些数据!

专栏:A-H 行:1-8

我在3小时后搜索.....

    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;

    public class CoordBoutons extends JFrame {

        CoordBoutons() {
            super("GridLayout");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            Container contenant = getContentPane();
            contenant.setLayout(new GridLayout(8, 8));

            for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                    contenant.add(new CaseEchiquier(i, j));
                }
            }

            pack();
            setVisible(true);
        }

        class CaseEchiquier extends JPanel {

            private int lin, col;

            CaseEchiquier(int i, int j) {
                lin = i;
                col = j;
                setPreferredSize(new Dimension(80, 75));
                setBackground((i + j) % 2 == 0 ? Color.WHITE : Color.GRAY);
                addMouseListener(new MouseAdapter() {
                  /*  private Color background;

                    @Override
                    public void mousePressed(MouseEvent e) {
                        background = getBackground();
                        setBackground(Color.RED);
                        repaint();

                    }
                  */

                    @Override
                    public void mousePressed(MouseEvent e) {
                         System.out.println((char)('a' + col) + "" + (8 - lin));
                    }

                    @Override
                    public void mouseEntered(MouseEvent e) {

                    }

                 /*   @Override
                    public void mouseReleased(MouseEvent e) {
                        setBackground(background);
                    }
                 */   

                });
    //            addActionListener(new ActionListener() {
    //                public void actionPerformed(ActionEvent evt) {
    //                    System.out.println((char) ('a' + col) + "" + (8 - lin));
    //
    //                }
    //            });
            }


        }

        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                @Override
            public void run() {
                JFrame.setDefaultLookAndFeelDecorated(true);
                CoordBoutons coordBoutons = new CoordBoutons();
            }
        });
    }
}

1 个答案:

答案 0 :(得分:2)

MouseEvent包含可用于获取坐标的getXgetY方法。使用它如下:

public void mouseClicked(MouseEvent e) {
   int x = e.getX(); 
}
在这种情况下,

x将包含用户按下鼠标按钮的坐标。

更新: 我已经根据你的评论更新了一些代码。这里我们使用getSource()我们转换为CaseEchiquier,因为这是getSource将返回的对象类型。之后,您拥有用户按下的对象,您可以执行您想要使用的任何逻辑

public void mouseClicked(MouseEvent e){
    CaseEchiquier current =(CaseEchiquier)e.getSource(); // get the object that the user pressed
    int lin = current.getLin();
    int col= current.getCol();
    //do something else with the object current
}

您还需要在CaseEchiquier类中添加getLingetCol方法