我正在尝试解决 Java 教科书中的一个练习,该练习需要编写一段代码来打开是/否 gialog,询问用户是否要绘制一个实心圆并将其着色为红色(是)或不(否),在这种情况下颜色为黑色(默认情况下;但为了清楚起见,我决定无论如何在我的代码中包含一个特定的语句)。我想到了(IDE:NetBeans)...:
int centre = JOptionPane.showConfirmDialog(null, "Do you want I turn the solid center circle color from black to red?",
"Click Yes or No:", JOptionPane.YES_NO_OPTION);
if (centre == JOptionPane.YES_OPTION)
{
canvas.setColor(Color.RED);
}
else if (centre == JOptionPane.NO_OPTION)
{
canvas.setColor(Color.BLACK);
}
canvas.drawOval(200, 200, 100, 100);
canvas.fillOval(225, 225, 50, 50);
...,但在选择任一选项后,对话框不断打开。如果没有对话框+ else-if 分支,即使根据您包含的 canvas.setColor(Color.RED); 仅以红色或黑色绘制实心圆,代码也能正确执行。声明或不声明。 [我想念/我不知道]什么? 非常感谢所有能够向我建议最简单(嘿!我是初学者)方法来编写所需代码的人。也非常感谢所有其他人:)。
最佳答案
您可能在 paintComponent()
中有这段代码,这是一个非常非常糟糕的主意。 每次 swing 需要绘制组件时都会调用 paintComponent()
。
应该在事件监听器中调用此对话框(例如,当用户单击按钮时)。然后,它应该将答案存储在某个 boolean 字段中,并且 paintComponent()
方法应该读取该 boolean 字段来决定绘制什么。
关于Java,JoptionPane : the yes-no dialog keeps on showing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29715209/