addMouseListener for a JPanel

前端 未结 2 1273
北荒
北荒 2021-01-18 01:04

Today I have a problem.. My program make a 8x8 grid and show the coord when I click on a JButton.

BUT I refuse to use JButton and I need to

相关标签:
2条回答
  • 2021-01-18 01:45

    The problem is that the method addActionListener does not exists for a JPanel. You should use the appropriate listener for this case (java.awt.event.MouseListener). Since MouseListener is an interface (and you don't want to implement all of its methods), you could use a MouseAdapter and override only the method(s) you need, like this:

    addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            System.out.println((char)('a' + col) + "" + (8 - lin));
        }
    });
    
    0 讨论(0)
  • 2021-01-18 02:01

    JPanel doesn't have ActionListener capabilities. Instead, you need to use a MouseListener

    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.GridLayout;
    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 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();
                }
            });
        }
    }
    

    Take a look at How to Write Mouse Listeners for more details...

    0 讨论(0)
提交回复
热议问题