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