2017-05-07 3 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

単純なミス:)あなたはpaintComponentは、多くの場合、複数回実行されますので、ループの前に50にXを設定する必要があります。あなたのグリッドは、最初の(少なくとも私にとっては)レンダリング動作しますが、それは第二枠は/ Xをレンダリング実行時にすでに250ですあなたのコードはこのようになります。

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

希望、これは参考になった:)

関連する問題