程序似乎没有明显的原因循环

Nad*_*dim 2 java loops if-statement

似乎我的输入框似乎出现了两次,即使它们也不应该出现.似乎无法弄清楚为什么.如果有人可以帮助,那会很棒:)

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
Run Code Online (Sandbox Code Playgroud)

我知道这是一个非常基本的程序,但我或多或少只是试图通过盯着基本的东西来学习java.所以希望如果我能理解如何让一个简单的程序运行,我可以继续前进.

Hov*_*els 7

除非要将程序冻结为爬网,否则不要在绘制方法中放入JOptionPane方法.该paint(...)方法应仅用于绘画.paint方法负责绘制组件所拥有的所有内容,如果你不必要地分解它的流,你的gui将不会及时渲染,或者根本不渲染.

您也无法控制何时调用paint或甚至调用它.正如您所看到的,它不是由您直接调用的(也不应该是),而是由JVM调用,以响应代码中的建议(通过调用repaint())或由于操作系统的请求,例如如果操作系统发现窗口的一部分是"脏"的,它将执行此操作.事实上,你发现由于这些原因,它最初经常被调用两次.将该代码放在其他地方,也许是在init方法中.

此外,这可能是一个Swing应用程序,而不是AWT应用程序,因为您getContentPane()在init方法中调用.如果是这样,不要直接在paint(...)JApplet 的方法中绘制,而是在paintComponent(...)JPAnel或JApplet所持有的其他JComponent派生的方法中绘制.这有几个原因,但主要的原因是applet的paint(...)方法负责许多你不想抓住机会的东西,包括绘制边框和子窗口,而应该覆盖一个只负责绘制组件的方法.