2011-10-26 47 views
0

繼承人的方法的例子來繪製1線穿在兩點drawingLines在Java中使用圖形

public void paintComponent(Graphics comp) { 
    Graphics2D comp2D = (Graphics2D)comp; 
    comp2D.drawLine(0,60,100,60); 
} 

我試着在該點構造通過,但是當我去到主運行它,我不能圖什麼我應該通過補償當我叫paintComponent

public class DrawLines{ 
     public void paintComponent(Graphics comp,int x0, int y0, int x1, int y1) { 
      Graphics2D comp2D = (Graphics2D)comp; 
      comp2D.drawLine(x0,y0,x1,y1); 
     } 

    public static void main(String[]args){ 
      drawLine(?,100,200,200,300); 
    } 
} 

我應該通過什麼?

+0

哪裏是你的圖形代碼的休息嗎?這是一個Swing應用程序? –

回答

4

您需要一個Graphics(使用Swing時通常會是一個Graphics2D實例)對象,它爲您提供了一些實際繪製的上下文。看看你的主要課程......你想畫一條線,但你有什麼要畫的?神奇地不會是一些窗口或畫布彈出來繪製,你需要設置這些東西。我建議您檢查Java Swing tutorial。也就是說,如果你已經非常熟悉Java。如果沒有,請確保您的Java知識首先提升到一個體面的水平。

+0

同意。 OP必須閱讀教程。這不是你能猜到的,並希望它能起作用。 –

+0

我懷疑他可能希望從一般軌跡出發,因爲他在談論一個構造函數時,顯然不是一個。那麼,除了默認值。 –

+0

是的,我明白我需要的東西來畫我應該包括我所有的主代碼對不起'import javax.swing。*; import java.awt。*; public class line extends JPanel { public void paintComponent(Graphics g){ g.drawLine(0,0,90,90); } public static void main(String args []){ JFrame jf = new JFrame(); jf.add(new line()); jf.setSize(500,500); jf.setVisible(true); } }' – user1014888

3

你會想給你的類兩個點字段,無論是那個或四個int字段,x1,y1,x2,y2,傳遞用於在您的構造函數中初始化這些字段的值,然後使用最重要的在繪製時,這些字段中保存的值。

例如,

import javax.swing.*; 
import java.awt.*; 

public class LinePanel extends JPanel { 
    private Point p1; // java.awt.Point objects 
    private Point p2; 

    // TODO: create constructor that accepts 
    // and updates the two points 

    public void paintComponent(Graphics g) { 

     super.paintComponent(g); // don't forget this! 

     // TODO: Change the method below so that it uses 
     // the two points to do the drawing with 
     // rather than use hard coded magic numbers. 
     g.drawLine(0, 0, 90, 90); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(500, 500); 
    } 

    public static void main(String args[]) { 
     JFrame jf = new JFrame(); 
     jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jf.add(new LinePanel()); // TODO: add parameters to constructor call. 
     // jf.setSize(500, 500); 
     jf.pack(); 
     jf.setVisible(true); 
    } 
} 
+2

這不能傷害: jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); – Chris

+0

@Chris:是的。但爲什麼要停在那裏。向JPanel添加getPreferredSize覆蓋並將pack()添加到JPanel。 :) –