2013-10-15 32 views
0

這是執行所有繪圖的代碼,但它只繪製了一半的箭頭。當它是一個垂直的箭頭(北或南)時,它會切斷左側,當它是水平的(東或西)時,它會切割頂部,兩者都集中在頂端;成爲完美的半個箭頭。只有一半繪圖使用drawPolygon顯示

public void paint(Graphics g) { 
     setSize(100, steps * 50); 
     for (int i = 1; i < steps + 1; i++) { 
      y = i * 20; 

      if (directions.peek() == "North") { 
       int[] xNPoints = {x, x + 6, x + 2, x + 2, x + 2, x + 2, x + 6}; 
       int[] yNPoints = {y - 5, y, y, y, y + 10, y, y}; 
       g.drawPolygon(xNPoints, yNPoints, 7); 
      } 
      else if (directions.peek() == "East") { 
       int[] xEPoints = {x + 10, x + 5, x + 5, x - 5, x - 5, x + 5, x + 5}; 
       int[] yEPoints = {y, y + 6, y + 2, y + 2, y + 2, y + 2, y + 6}; 
       g.drawPolygon(xEPoints, yEPoints, 7); 
      } 
      else if (directions.peek() == "South") { 
       int[] xSPoints = {x, x + 6, x + 2, x + 2, x + 2, x + 2, x + 6}; 
       int[] ySPoints = {y + 5, y, y, y - 10, y - 10, y, y}; 
       g.drawPolygon(xSPoints, ySPoints, 7); 
      } 
      else if (directions.peek() == "West") { 
       int[] xWPoints = {x - 5, x, x, x + 10, x + 10, x, x}; 
       int[] yWPoints = {y, y + 6, y + 2, y + 2, y + 2, y + 2, y + 6}; 
       g.drawPolygon(xWPoints, yWPoints, 7); 
      } 
      g.drawString((String)directions.pop(), 5, y + 5); 

該計劃的目標是返回一組以相反的順序用戶提供的方向,我有很多的清理(添加例外,清理GUI),但所有的代碼除了我剛剛提供的是用於提示和存儲用戶輸入的步數以及它們是什麼。

回答

0

讓我們先從你覆蓋paint,也是事實沒有打電話super.paint並移動到它的Java String比較不==equals完成,例如

if (directions.peek() == "North") { 

應該是

if ("North".equals(directions.peek())) { 

如果您正在覆蓋頂層容器paint(如JFrameJApplet),你應該避免d如此。相反,你應該創建一個自定義組件,像JPanel並重寫它的paintComponent方法,確保您也呼籲super.paintComponent,否則你將與一些討厭的油漆文物結束

看看Performing Custom Painting瞭解更多詳情...

+0

字符串比較絕對是一個疏忽。謝謝。我仍然在學習這些圖形用戶界面的基本知識,而我們的老師也很少涉及它,所以我認爲這個資源應該是有幫助的。謝謝。但是我找不到你說過的重複帖子。我可以獲得鏈接嗎? – user2880732

+0

在你的問題的頂部,現在有一個鏈接... – MadProgrammer

+0

這不是我在這裏問的。我意識到我不應該使用==運算符,現在我改變了它。問題仍然是,只有一半的圖形顯示出來,並且在開始繪製後出現無限循環的錯誤。 – user2880732