似乎我的输入框似乎出现了两次,即使它们也不应该出现。似乎无法弄清楚为什么。如果有人可以提供帮助,那就太好了。)
int x; //temperature input
int y; //temperature type
int z; //temperature convert
int c; //temperature celsius
int f; //temperature fahrenheit
public void init()
{
setSize(500, 500);
Container c = getContentPane();
c.setBackground(Color.BLUE);
}
public void paint (Graphics g)
{
super.paint(g);
g.setFont(new Font("Veranda", Font.PLAIN, 20));
g.setColor(Color.BLACK);
String number = JOptionPane.showInputDialog("What temperature would you like to convert? (input # of degrees)");
x = Integer.parseInt(number);
String number2 = JOptionPane.showInputDialog("What temperature type are you inputting? 1. Fahrenheit 2. Celsius");
y = Integer.parseInt(number2);
if (y==1)
{
c=(5/9)*(f-32);
g.drawString("Your temperature of" + x + "is" + y + "Celsius", 250, 100);
}//end if
if (y==2)
{
f=(9/5)*c+32;
g.drawString("Your temperature of" + x + "is" +y + "Fahrenheit", 250, 100);
}//end if
}//end paint
我知道这是一个非常基本的程序,但我或多或少只是试图通过盯着基本的东西来学习java。所以希望如果我能理解如何让一个简单的程序运行,我可以继续前进。
答案 0 :(得分:7)
除非您想要将程序冻结为爬网,否则不要在paint方法中放入JOptionPane方法。 paint(...)
方法应仅用于绘画。 paint方法负责绘制组件所拥有的所有内容,如果你不必要地分解它的流,你的gui将不会及时渲染,或者根本不渲染。
您也无法控制何时调用paint或甚至调用它。正如您所看到的,它不是由您直接调用的(也不应该是),而是由JVM调用,以响应代码中的建议(通过调用repaint()
)或由于请求由操作系统,例如,如果OS发现窗口的一部分是“脏的”,它将执行此操作。事实上,你发现由于这些原因,它最初经常被调用两次。将该代码放在其他地方,也许是在init方法中。
此外,这似乎可能是Swing应用程序,而不是AWT应用程序,因为您在init方法中调用getContentPane()
。如果是这样,请不要直接在JApplet的paint(...)
方法中绘制,而是在JPAnel的paintComponent(...)
方法或JApplet所拥有的其他JComponent派生中绘制。这有几个原因,但主要的原因是applet的paint(...)方法负责许多你不想抓住机会的东西,包括绘制边框和子窗口,而应该覆盖一个只负责绘制组件的方法。
答案 1 :(得分:0)
paint()
方法将被自动调用,因为它的功能是使用图形上下文中的任何更新来绘制屏幕。在这种情况下,您希望接受来自用户的输入并根据此值,您需要在屏幕上显示内容。这里发生的事情是,因为paint
方法是一个回调方法被多次调用,显然你的输入将始终显示。所以,取出所有JOptionPane.showInputDialog
方法来自paint()
,并将其称为其他地方。