2017-05-07 39 views
0

我花了最近幾天試圖瞭解在Java中的2D圖形,我開始得到它的竅門。我經歷了一個教程,現在我明白如何畫線(或其他物體)到JFrame。但是,我遇到了一個心理障礙。我想在框架上創建一個網格,並且將必要的邏輯嵌入代碼的paintComponent()部分,但它不起作用。我知道我可以一遍又一遍地寫下drawLine(),但爲什麼如果我在評論的章節中添加代碼,代碼是不會工作的?自動繪圖與paintComponent()不工作的邏輯

import javax.swing.SwingUtilities; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.BorderFactory; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 

public class SwingPaintDemo2 { 

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGUI(); 
     } 
    }); 
} 

private static void createAndShowGUI() { 

    JFrame f = new JFrame("Line Test"); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.add(new MyPanel()); 
    f.pack(); 
    f.setVisible(true); 
} 
} 

class MyPanel extends JPanel { 

public int x = 50; 

public MyPanel() { 
    setBorder(BorderFactory.createLineBorder(Color.black)); 
} 

public Dimension getPreferredSize() { 
    return new Dimension(250,250); 
} 

public void paintComponent(Graphics g) { 
    super.paintComponent(g);  

    //while(x<250){ 
    g.drawLine(0,x,250,x); 
    g.drawLine(x,0,x,250); 
    //x = x+50;} 
} 
} 

回答

2

簡單的錯誤:)你需要在循環前X設置爲50,因爲paintComponent常常會跑了多次。網格工作第一渲染(至少對我來說),但是,當它運行在第二幀/渲染X已經是250你的代碼應該是這樣的:

x = 50; 
while(x<250){ 
g.drawLine(0,x,250,x); 
g.drawLine(x,0,x,250); 
x = x+50;} 

希望這是有幫助:)