0

これは私の最初の投稿であり、私はプログラミングに非常に慣れていません (独学)。私の用語が正確に標準に達していない場合や、他の間違いを犯している場合は、ご容赦ください。ユーザー入力を取得し、その入力を使用して画面に単純な四角形を描画するために、2 つのクラスを使用するプログラムを作成しようとしています。すべてが機能するようになりましたが、ユーザー生成コンテンツを認識できません。「x」変数を定義し、ユーザーがその値を入力しましたが、その値は毎回「0」として渡されます。ユーザーは、fillrectangle を作成するときに「x」値として使用される整数値を入力するよう求められます。ただし、実行すると、x 値は常に「0」になります。どういうわけか、変数「x」がユーザーが入力した値に変更されていません。

以下は私のコードですが、貧弱かもしれません。うまくいけば、誰かが私にいくつかのアイデアを与えることができます.

メインクラス

import javax.swing.JFrame;
import java.awt.*;
import java.util.*;

public class first {


    public static void main(String[] args) {

        second p = new second();
        p.setValues();
        p.getX();
        JFrame j = new JFrame("New Rectangle");
        j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        second t = new second();
        j.add(t);
        j.setSize(500,500);
        j.setVisible(true);


    }

}

セカンドクラス

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class second extends JPanel{
     int x;

    public void setValues()
    {
        Scanner s = new Scanner(System.in);
        System.out.println("Enter the X value");
        x = s.nextInt();

    }



    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        this.setBackground(Color.WHITE);

        System.out.println(x);
        g.setColor(Color.BLUE);
        g.fillRect(x, 20, 50, 50);

    }
}
4

2 に答える 2

1

という名前の変数が参照するオブジェクトを使用して情報を収集しているのに、変数 が参照するオブジェクトを使用しpて画面に描画することが問題のようですt。変数は、静的でない限り、クラス間で共有されません。詳細については、このドキュメントを参照してください。

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

これを視覚化する 1 つの方法は、クラスを単なる設計図と考えることです。データがどのように見えるか、どのように処理されるかを説明しています。設計図から何かを構築する準備ができたら、newキーワードを使用します。その時点で、ブループリント、つまりクラス ファイルからの説明に基づいて、新しいオブジェクトが作成されます。

実世界の例を使用すると、特定のタイプの家の設計図があり、あなたと私がこの設計図の仕様に正確に一致する家を建てた場合、同じ家を持っていると言えます。しかし、実際にはそうではありません。私が 20 匹の猫を飼っていて、私の家が臭くなっても、あなたの家は臭くありません。私たちの家の間取りは同じですが、実際に家の中で何が起こっているかは非常に異なります.

コードを機能させるには、t変数を削除して呼び出します。j.add(p);

編集: もう少し詳細を追加します。値が常に 0 である理由は、最初の初期化時に Java がプリミティブ型のデフォルト値を選択するためです。整数の場合、デフォルト値は 0 です。

于 2013-08-25T00:40:21.793 に答える
0

x 値が常に 0 である理由は、次のように言うときに別のインスタンスを作成しているためです。

second t = new second(); //Creates a new instance of x (another copy of x)

x の正しい値が得られSystem.out.print(p.x);ます。p.setValues()

あなたのコードに関する限り、 p が存在する理由がよくわかりません。このようなことをするだけでうまくいくはずです:

    JFrame j = new JFrame("New Rectangle");
    j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

   second t = new second();

   t.setValues();
   j.add(t);
   j.setSize(500, 500);
   j.setVisible(true);
于 2013-08-25T00:41:01.653 に答える