2

入力ボックスが 2 回表示されるようです。理由がわからないようです。誰かが助けることができれば素晴らしいだろう:)

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 を学ぼうとしているだけです。簡単なプログラムを機能させる方法を理解できれば、次に進むことができます。

4

2 に答える 2

7

プログラムをクロールするためにフリーズしたい場合を除き、ペイント メソッドに JOptionPane メソッドを入れないでください。このpaint(...)方法は、塗装のみに使用してください。paint メソッドは、コンポーネントが保持するすべてのものを描画する責任を負います。そのフローを不必要に分割すると、GUI がタイムリーにレンダリングされないか、まったくレンダリングされない可能性があります。

また、ペイントがいつ呼び出されるか、または呼び出されるかどうかを制御することもできません。ご覧のとおり、これはユーザーによって直接呼び出されるのではなく (そうすべきでもありません)、コード内の提案に応じて (を呼び出してrepaint())、またはオペレーティング システムからの要求により、JVM によって呼び出されます。たとえば、 OS がウィンドウのセクションが「ダーティ」であることを検出すると、OS はこれを行います。実際、これらの理由により、最初に 2 回呼び出されることがよくあります。そのコードを別の場所、おそらく init メソッドに配置します。

getContentPane()また、 init メソッドを呼び出しているため、これは AWT アプリケーションではなく Swing アプリケーションである可能性があります。その場合は、JApplet のメソッドで直接描画しないでくださいpaint(...)。代わりにpaintComponent(...)、JPanel または JApplet が保持する他の JComponent 派生物のメソッドで描画します。これにはいくつかの理由がありますが、主な理由は、アプレットの paint(...) メソッドが、境界線や子ウィンドウの描画など、手を加えたくない多くのことを担当していることです。代わりに、コンポーネントの描画のみを担当するメソッドをオーバーライドする必要があります。

于 2012-06-04T02:24:36.693 に答える
0

このpaint()メソッドは、グラフィック コンテキストで更新されたものを画面に描画する機能があるため、自動的に呼び出されます。この場合、ユーザーからの入力を受け入れ、この値に基づいて、画面に何かを表示する必要があります。何が起こったのかというと、メソッドはコールバック メソッドであるため、何度か呼び出されているため、明らかに入力が常に表示されます。そのため、すべてのメソッドpaintを取り出して、別の場所で呼び出します。JOptionPane.showInputDialogpaint()

于 2012-06-04T04:22:52.073 に答える