2011-12-29 73 views
3

我有2個名爲PaintMe.java和Starter.java的類文件。 PaintMe.java包含:如何調用Applet擴展類中的paint方法?

import java.applet.Applet; 
import java.awt.*; 

public class PaintMe extends Applet { 
    public void paint(Graphics g) { 
     g.setColor(Color.red); 
     g.drawString("HELLOOO", 15, 25); 
    } 
} 

Starter.java包含:

import java.applet.Applet; 
import java.awt.Graphics; 


public class Starter { 
    public static void main(String[] args) { 
     PaintMe ring = new PaintMe(); 
     ring.paint(); 
    } 
} 

所以問題是,我怎麼能畫我的字符串調用從Starter.java油漆的方法?

+0

你不應該自己調用'paint(Graphics g)'方法。它由Event Dispatch Thread調用。 如果您從代碼中移除'ring.paint();',事情就會按預期工作。 – 2011-12-29 09:33:23

回答

3

爲了得到它來編譯,改變

ring.paint(); 

..to ..

ring.repaint(); 

  1. 沒有使用AWT在這個千年代碼執行。使用Swing(提供JApplet)。
  2. 不要從main(String[])開始一個小程序。當JRE嵌入到網頁中時(或者使用JWS啓動),JRE將啓動一個小程序。 GUI可以在面板中設計,然後放入一個自由浮動的應用程序或小程序中。這被稱爲混合動力。但是框架和applet都分別添加了GUI,這是(通常)不同的類。
  3. 它存在的主要是無用的。除非將小程序添加到容器並使其可見,否則代碼將成功運行,但會在一瞬間結束而不顯示任何內容。

更新1

..tried這一點,但它仍然沒有吸取我的小程序窗口串。

試試這個。

// <applet code='PaintMe' width=300 height=50></applet> 
import java.applet.Applet; 
import java.awt.*; 

public class PaintMe extends Applet { 
    public void paint(Graphics g) { 
     g.setColor(Color.red); 
     g.drawString("HELLOOO", 15, 25); 
    } 
} 

提示

> javac PaintMe.java 
> appletviewer PaintMe.java 

截圖

PaintMe


更新2

..我需要從Starter.java類開始。

我認爲這是一個愚蠢的要求,好像JWS(如前所述&在評論鏈接)推出JFrame是查看這個GUI的最佳途徑。 OTOH,這是一個(非常)天真的Starter類的實現,它將在屏幕上顯示該applet。

,融合了AWT和Swing(壞),它並不試圖實現任何類型的applet上下文的,並且不調用該applet init/start/stop/destroy方法,但足以讓屏幕上的小程序來自另一班。

Starter

import java.awt.Dimension; 
import javax.swing.JOptionPane; 

public class Starter { 
    public static void main(String[] args) { 
     PaintMe ring = new PaintMe(); 
     ring.setPreferredSize(new Dimension(250,30)); 
     JOptionPane.showMessageDialog(null, ring); 
    } 
} 
+0

嘗試過,但它仍然不會在小程序窗口中繪製我的字符串。 – Maksim 2011-12-29 09:42:52

+0

查看編輯回答。 – 2011-12-29 09:49:14

+0

編譯並運行PrintMe.java工作正常,但我需要從Starter.java類開始。 – Maksim 2011-12-29 09:55:53

2

Component.paint(Graphics)

你不應該自己調用paint方法。 paint是AWT在需要時調用的一種方法,它將爲該方法提供Graphics對象。要顯示你的applet,你需要把它放在一個Frame中,並使Frame可見。 AWT將在每次需要時調用paint方法。

請注意,Applet通常用於在HTML頁面中嵌入一些Java ... applet。如果你所需要的只是一個獨立的Java應用程序,你應該使用Canvas,或者甚至更好,根本不使用AWT,而是使用Swing。谷歌爲「搖擺教程」。

+0

我需要在Applet中顯示它,並且我打算在測試主頁上使用它。 – Maksim 2011-12-29 09:41:11

+0

然後你不需要一個主要的方法。除非你想測試瀏覽器的小程序,否則Starter類是不需要的。但是有appletviewser。閱讀有關小應用程序的教程:http://docs.oracle.com/javase/tutorial/deployment/applet/ – 2011-12-29 09:46:22

1

您可以通過將構造函數添加到PaintMe方法並從那裏調用repaint來更改它。

1

要從Starter.java繪製您的繪畫,您需要逐幀完成。首先在main中創建一個框架,然後將PaintMe類的對象添加到該框架。下面的示例代碼:

import java.applet.Applet; 
import java.awt.*; 
import java.awt.event.*; 

public class PaintMe extends Applet { 
    public void paint(Graphics g) { 
     g.setColor(Color.red); 
     g.drawString("HELLOOO", 15, 25); 
    } 
} 

public class Starter { 
    public static void main(String[] args) { 
     Frame f = new Frame("Painting"); 
     f.setSize(200,200); 
     PaintMe paintMe = new PaintMe(); 
     f.add(paintMe); 
     f.setVisible(true); 
     f.addWindowListener(new WindowAdapter() 
      { 
      public void windowClosing(WindowEvent we) 
      { System.exit(0); } 
      } 
     ); 
    } 
}