2013-08-24 36 views
0

這是我的第一篇文章,我對編程非常陌生(自學)。請原諒我,如果我的術語不完全符合標準或我做任何其他失禮。我正在嘗試編寫一個程序,該程序使用兩個類來獲取用戶輸入,並使用該輸入在屏幕上繪製一個簡單的矩形。我已經完成了所有工作,但我無法讓用戶生成的內容得到識別。我已經定義了一個'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); 

    } 
} 
+0

需要second.getX()的代碼。 –

+0

@ user2714543實際上,代碼實際上並不算太差。我看到的一件事是按照慣例,類名應該大寫。 –

回答

1

它看起來像問題是,你收集使用名爲p變量引用的對象的信息,但你繪製到屏幕與由變量t引用的對象相關聯。變量不會在類之間共享,除非它們是靜態的 - 請參閱此文檔以獲取更多信息。

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

的一種方式,以幫助可視化,這是考慮一類只是一個藍圖。您正在描述數據將會是什麼樣子,以及它將如何處理。當您準備從藍圖中創建某些內容時,您可以使用new關鍵字。此時,根據您對藍圖的描述(即類文件),您有一個新對象。要使用現實世界的例子:如果你有一個特定類型的房屋的藍圖,你和我都建造了我們的房子完全符合這個藍圖的規格,可以說我們有同樣的房子。但事實上,我們沒有;如果我有20只貓,而我的房子變臭,你的房子不會發臭。我們的平面佈置圖是完全相同的,但是我們每個房屋內的實際情況是完全不同的。

爲了使代碼的工作,簡單地擺脫t變量,並調用j.add(p);

編輯:添加更多的細節。值始終爲0的原因是因爲Java在初始化初始化時爲基本類型選擇了默認值。在整數的情況下,默認值是0

+0

非常感謝!你是對的。我正在調用兩個不同的實例,所以一旦我在與輸入相同的實例中繪製圖形,它就一切正常。 – user2714543

0

原因x的值始終爲0是因爲你,當你說

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

如果你只是做System.out.print(p.x);p.setValues()後創建它的另一個實例你會得到x的正確值。

就你的代碼而言,我不太明白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); 
+0

是的,這就是它的原因。非常感謝您花時間回答! – user2714543