我有一个程序,它接受用户的鼠标单击并使用鼠标的坐标绘制一系列六边形。我在 JPanel 上画了一个红色矩形,它应该代表允许用户单击的边界,因此为了确保用户这样做,我添加了一条警告消息,每当用户点击超出范围。它说,“无法单击红色矩形之外。请重试。”
消息弹出后,我希望用户能够忽略该消息并重试,但是每当用户单击右上角的“确定”或“X”时,该消息就会再次出现,我好像无法关闭弹出框。有没有其他方法可以通知用户,同时让他们重试?
下面是我为 JPanel
、hexPanel
实现的 MouseListener
代码。
hexPanel.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
boolean clicked = false;
int left = HexDrawingPanel.iX(-rWidth/2), right = HexDrawingPanel.iX(rWidth/2);
int top = HexDrawingPanel.iY(rHeight/2), bot = HexDrawingPanel.iY(-rHeight/2);
while(!clicked) {
if(!(e.getX() > right || e.getX() < left ||
e.getY() < top || e.getY() > bot))
clicked = true;
else
JOptionPane.showMessageDialog(frame, "Must click inside red rectangle. Try again.");
}
HexDrawingPanel.radius = (float)Math.sqrt(Math.pow(e.getX() - left, 2) + Math.pow(e.getY() - top, 2));
hexPanel.repaint();
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
});
最佳答案
您的 while-loop
正在阻塞事件调度线程,这意味着不可能发生任何新的鼠标点击...
做一些更像......的事情可能会更好
if(!(e.getX() > right || e.getX() < left ||
e.getY() < top || e.getY() > bot)) {
HexDrawingPanel.radius = (float)Math.sqrt(Math.pow(e.getX() - left, 2) + Math.pow(e.getY() - top, 2));
hexPanel.repaint();
} else
JOptionPane.showMessageDialog(frame, "Must click inside red rectangle. Try again.");
}
关于java - JOptionPane 无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28468766/