2013-07-15 59 views
3

我正在練習測試我已經出現,我正在通過一些練習題。我遇到了一個比其他人更難以挑戰我的問題。我需要編寫一個方法,使用看起來很像的swing,創建100個給定寬度的矩形,並通過簡單的數學找到不同的高度。我已經讓我的數組保存了每個高度,並且設置了寬度。我可以如何使用swing創建這些矩形?我寧願以這樣的方式來回答這個問題,以試圖推動我朝着正確的方向(即嘗試使用JLabel或這種性質的東西)而不是爲我做。我怎麼會這樣學習呢?我最終也會得到一些跟進問題。這是使我的陣列高度和設置我的寬度的代碼。這可能是假設的,但我的參數是以像素爲單位的。不知道如何使用擺動繪製矩形

public void paintComponent() { 
    int[] heights = new int[100]; 
    int width = 10 
    int initialHeight = 100; 
    for (int i=0; i<100; i++) { 
     int usedHeight = height - i; 
     heights[i] = usedHeight; 
    } 

再次,請不要爲我做的。我只需要指出正確的方向。我假設我會以某種方式使用揮杆來做到這一點。

+0

究竟哪個部分讓你感到困擾?尋找使用擺動繪製矩形的信息應該不是非常困難。 –

+0

你擺脫了擺動路線有多遠,你是否有一個空白區域,需要填充它或正在擺動窗口也造成困難 –

+0

在擺動我們已經通過JFrame,JPanel,JLabel,Layouts,Buttons和菜單。我可以創建所有這些,但在思考如何使用swing實際創建和繪製矩形時遇到困難。 –

回答

3

基本上,你想要做的是子類JComponent and override paintComponent。傳遞給它的對象Graphics可以讓你做你需要的東西(hint)。

+1

哇哦,我完全忽略的JComponent。我們從未在作業中使用過這門課,所以它從未跨過我的腦海。簡單的事情很容易被忽視。這應該足以讓我去。謝謝! –

+1

@CodyBerry:不要考慮'JPanel'了'JComponent'這種各種各樣的畫,因爲有兩個在本[答案]引用(http://stackoverflow.com/a/16998657/1057230)+之間的細微差別1雖然爲暗示,我必須等待這一點,因爲我的極限了就沒了今天:( –

+1

@nIcEcOw不錯的接球,但它足以調用'super.paintComponent方法(圖形)'的'覆蓋第一paintComponent'事情。 – gustafc

2

一般方法:

  • 做一個JFrame有一個JPanel

  • 給它一個佈局(一些簡單的像一個網格佈局可能會爲這個 工作)

  • 添加組件到你的容器(我會指向你Rectangle)(或者你可以使用JPanels並設置它們的邊框/填充顏色)

在Swing學習最困難的事情之一是佈局經理,所以希望花一些時間在牆上甩頭,直到它讓位。準備擺動所有的矩形,並將它們繪製在一個列中,而不是繪製它們。可能不是這樣的順序。

+1

矩形不是一個Swing組件。矩形保存矩形的值(x原點,y原點,寬度,高度)。 –

+0

你是對的,矩形是awt。擺動-Y的辦法就是重寫paintComponent,作爲公認的答案,或者乾脆接壤JPanels。 – roippi

1

OK,第一,你有一些錯誤在你當前的代碼(假設高度遞減):

public void paintComponent() { 
    int[] heights = new int[100]; 
    int width = 10; 
    int initialHeight = 100; 
    for (int i=0; i<100; i++) { 
    heights[i] = initialHeight; 
    initialHeight--; 
    //also heights[i] = 100-i; 
    } 
} 

usedHeight週期內聲明的是,它在週期的一個「週期」存在ONY。其次,如果你想了解擺動是如何工作的,下載5 + - 已經正在運行的例子,並從代碼中找出它(對我來說工作得很好)。

+0

http://zetcode.com/tutorials/javaswingtutorial/firstprograms/ – kajacx