作者 主題: 請問java...  (閱讀 4259 次)

0 會員 與 1 訪客 正在閱讀本文。

nonstop

  • 可愛的小學生
  • *
  • 文章數: 1
    • 檢視個人資料
請問java...
« 於: 2003-12-20 00:55 »
請問java一個基本的問題:
在project裡有:A.java  B.java
B.java裡主要是個 jpanel,在上面畫些圖:g.draw...之類的
我要加到A.java裡....會發生 exception
但如果把g.***等繪圖指令去掉,用system.out.print則會印出該資訊
代碼: [選擇]
public class Frame1 extends JFrame {
  Frame1(){

  }
  public static void main(String[] args){
    Frame1 f=new Frame1();
    f.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    f.setSize(500,300);

    Panel1 p=new Panel1();

    Container c=new Container();
    c.add(p);
    f.addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent e){
        System.exit(0);
      }

    }
                        );
    f.pack();
    f.setVisible(true);

  }

}

代碼: [選擇]
public class Panel1 extends JPanel {
  BorderLayout borderLayout1 = new BorderLayout();

  public Panel1() {
    try {
      jbInit();
    }
    catch(Exception ex) {
      ex.printStackTrace();
    }
    System.out.print("panelhihi");
    try{
      System.out.print("try");
      Graphics g;
      g = getGraphics();
      g.drawOval(10,10,10,10);
    }
    catch (Exception ex){
       System.out.print("nonono");
    }


  }
  void jbInit() throws Exception {
    this.setLayout(borderLayout1);
  }
}


請問大大們,可以指點一下為什麼嗎?
ihih~~~

jasonwilliams

  • 懷疑的國中生
  • **
  • 文章數: 81
    • 檢視個人資料
Re: 請問java...
« 回覆 #1 於: 2004-01-07 16:57 »
因為 你使用的function getGraphics() 所屬的 PrintJob class 為 abstract class, 所以 不能 直接 使用 或是 經由 new PrintJob()的方式 來獲得 所屬的 class. 因此 得藉由
java.awt.Toolkit toolkit = new Toolkit();
toolkit.getPrintJob(java.awt.Frame, java.lang.String, java.util.Properties);
的方式 來取得 Graphic class. 如此 接下的 drawXXX() method 才不會有錯.
 
引述: "nonstop"
請問java一個基本的問題:
在project裡有:A.java  B.java
B.java裡主要是個 jpanel,在上面畫些圖:g.draw...之類的
我要加到A.java裡....會發生 exception
但如果把g.***等繪圖指令去掉,用system.out.print則會印出該資訊
代碼: [選擇]
public class Frame1 extends JFrame {
  Frame1(){

  }
  public static void main(String[] args){
    Frame1 f=new Frame1();
    f.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    f.setSize(500,300);

    Panel1 p=new Panel1();

    Container c=new Container();
    c.add(p);
    f.addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent e){
        System.exit(0);
      }

    }
                        );
    f.pack();
    f.setVisible(true);

  }

}

代碼: [選擇]
public class Panel1 extends JPanel {
  BorderLayout borderLayout1 = new BorderLayout();

  public Panel1() {
    try {
      jbInit();
    }
    catch(Exception ex) {
      ex.printStackTrace();
    }
    System.out.print("panelhihi");
    try{
      System.out.print("try");
      Graphics g;
      g = getGraphics();
      g.drawOval(10,10,10,10);
    }
    catch (Exception ex){
       System.out.print("nonono");
    }


  }
  void jbInit() throws Exception {
    this.setLayout(borderLayout1);
  }
}


請問大大們,可以指點一下為什麼嗎?