我正在尝试解决Java教科书中的练习,这需要编写一段打开yes-no 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-如果分支代码正确执行,即使通过包括canvas.setColor(Color.RED),仅绘制红色或黑色实心圆;声明与否。 什么[我想念/不知道]? 非常感谢所有能够建议我最简单(嘿!我是初学者)的方式来编写所需的代码。非常感谢所有其他人:)。
答案 0 :(得分:3)
你可能在paintComponent()
中有这个代码,这是一个非常非常糟糕的主意。 paintComponent()
被称为每次 swing需要绘制组件。
应该在事件监听器中调用此对话框(例如,当用户单击按钮时)。然后它应该将答案存储在某个布尔字段中,paintComponent()
方法应该读取该布尔字段以决定要绘制的内容。