2017-05-07 71 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;} 

希望这是有帮助:)