Java domHits(); } } 我尝试了一个布尔[][]表的解决方案,在Begging中初始化表false,当我们在JPanel中单击时,该布尔值变为true。问题是我可以再次命中相同的点!谢谢你的关注!所以一旦你点击了一个面板,它就再也不能被点击了?为什么

Java domHits(); } } 我尝试了一个布尔[][]表的解决方案,在Begging中初始化表false,当我们在JPanel中单击时,该布尔值变为true。问题是我可以再次命中相同的点!谢谢你的关注!所以一旦你点击了一个面板,它就再也不能被点击了?为什么,java,swing,click,mouse-listeners,onmouseclick,Java,Swing,Click,Mouse Listeners,Onmouseclick,domHits(); } } 我尝试了一个布尔[][]表的解决方案,在Begging中初始化表false,当我们在JPanel中单击时,该布尔值变为true。问题是我可以再次命中相同的点!谢谢你的关注!所以一旦你点击了一个面板,它就再也不能被点击了?为什么不删除鼠标侦听器?我想实现这一点,但我做不到。我希望当点击JPanel时,它不能再次点击!我添加了一个取消注册鼠标侦听器的概念。我尝试了一个布尔[]表的解决方案,在beggining中初始化表false,当我们单击JPanel时,这个布尔值变为

domHits(); } }
我尝试了一个布尔[][]表的解决方案,在Begging中初始化表false,当我们在JPanel中单击时,该布尔值变为true。问题是我可以再次命中相同的点!谢谢你的关注!所以一旦你点击了一个面板,它就再也不能被点击了?为什么不删除鼠标侦听器?我想实现这一点,但我做不到。我希望当点击JPanel时,它不能再次点击!我添加了一个取消注册鼠标侦听器的概念。我尝试了一个布尔[]表的解决方案,在beggining中初始化表false,当我们单击JPanel时,这个布尔值变为true。问题是我可以再次命中同一点!谢谢你的关注!所以一旦你点击了一个面板,它就再也不能被点击了?为什么不删除鼠标侦听器?我想实现这一点,但我做不到。我希望当点击JPanel时,它不能再次点击!我添加了一个取消注册鼠标侦听器的概念。你能尝试以更清晰的方式表达你的问题吗?我有一个JPanel[]]二维表格。当我点击JPanel时,它的背景颜色会变为红色或白色。问题是,当我点击JPanel时,我不想再点击那里,但我发布的代码无法做到这一点!我希望我能帮助你理解我的代码!不要为每个单元格创建新的鼠标侦听器。创建一个MouseListener,并在每个单元格中添加相同的侦听器。我如何在二维表格中做到这一点?你能给我一个代码示例吗?你能尝试以更清晰的方式表达你的问题吗?我有一个JPanel[][]表是二维的。当我点击一个JPanel时,它的背景颜色会变成红色或白色。问题是,当我点击JPanel时,我不想再点击那里了,但用我发布的代码,我不能这样做!我希望我能帮助你理解我的代码!不要为每个单元格创建新的鼠标侦听器。创建一个MouseListener,并在每个单元格中添加相同的侦听器。我如何在二维表格中实现这一点?你能给我一个代码示例吗?
for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            innerCells[i][j] = new JPanel();
            innerCells[i][j].setLayout(new BorderLayout());
            innerCells[i][j].setBorder(BorderFactory.createLineBorder(lineColor));
            innerCells[i][j].setBackground(backgroundColor);
            innerCells[i][j].addMouseListener(new MouseListener() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    JPanel k = (JPanel) e.getSource();
                    JLabel l = new JLabel("", JLabel.CENTER);
                    int x = getRows();
                    int y = getCols();
                    for (int r = 0; r < getRows(); r++) {
                        for (int c = 0; c < getCols(); c++) {
                            if (innerCells[r][c] == k) {
                                x = r;
                                y = c;
                            }
                        }
                    }
                    if (array[x][y] == 0) {
                        l.setBackground(k.getBackground());
                        k.add(l);
                        k.setBackground(Color.white);
                        k.revalidate();
                    } else {
                        l.setBackground(k.getBackground());
                        k.add(l);
                        k.setBackground(Color.red);
                        k.revalidate();
                    }
                    randomHits();
                }
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class NoMoreClicks {

    public static void main(String[] args) {
        new NoMoreClicks();
    }

    public NoMoreClicks() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }

        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridBagLayout());
            add(new JLabel("Single Clicked Pane..."));
            addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    e.getComponent().removeMouseListener(this);
                    JOptionPane.showMessageDialog(e.getComponent(), "Was Clicked");
                }
            });
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

    }

}
for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            innerCells[i][j] = new JPanel();
            innerCells[i][j].setLayout(new BorderLayout());
            innerCells[i][j].setBorder(BorderFactory.createLineBorder(lineColor));
            innerCells[i][j].setBackground(backgroundColor);
            innerCells[i][j].addMouseListener(new MouseListener() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    JPanel k = (JPanel) e.getSource();
                    JLabel l = new JLabel("", JLabel.CENTER);
                    int x = getRows();
                    int y = getCols();
                    for (int r = 0; r < getRows(); r++) {
                        for (int c = 0; c < getCols(); c++) {
                            if (innerCells[r][c] == k) {
                                x = r;
                                y = c;
                            }
                        }
                    }
                    if (k.getComponents().length == 0) {
                        if (array[x][y] == 0) {
                            l.setBackground(k.getBackground());
                            k.add(l);
                            k.setBackground(Color.white);
                            k.revalidate();
                        } else {
                            l.setBackground(k.getBackground());
                            k.add(l);
                            k.setBackground(Color.red);
                            playerhit++;
                            GameScreen.FinalWinner();
                            k.revalidate();
                        }
                        randomHits();

                    }
                }