在没有扩展Applet类的情况下在applet上绘图

时间:2014-11-23 16:31:34

标签: java applet

import java.util.InputMismatchException;    
import java.util.Scanner;
class Rectangle extends Shape
{
private double width,height;

Rectangle(double w,double h){
    super();
    width=w;
    height=h;
}
@Override
public void draw() {

}
}
class MyClass
{
    public static void main(String[] args)
    {
        try
        {        
            Scanner c=new Scanner(System.in); 
            String st="";
            System.out.println("enter the number of Shapes you want to add(0 will exit)");
            byte s=c.nextByte();
            if(s==0)
                return;
            Shape[] shapes=new Shape[s];
            for(byte j=0;j<s;j++)
            {                                      
               System.out.println("what kind of shapes do you want , r for Rectangle , c for Circle");                    
               st=c.next();
               if("c".equals(st))
               {
                   System.out.println("enter the radius and then the Name please");
                   shapes[j]=new Circle(c.nextDouble());
                   shapes[j].setName(c.next());    
                   break;
               }
               else if("r".equals(st))
               {
                   System.out.println("enter the width and height and then the Name please");
                   shapes[j]=new Rectangle(c.nextDouble(),c.nextDouble());
                   shapes[j].setName(c.next());
                   break;
               }
               else
               {
                   System.out.println("c or r please");
                   j--;
               }                   
            }  
            DrawShapes(shapes);                             
        }
        catch(InputMismatchException i)
        {
            System.out.println("a decimal number was expected , but text was found , so we will start from begining");
        }
        catch(Throwable e)
        {
            System.out.println(e.getMessage());
        }    
    }
    public static void DrawShapes(Shape[] shapes)
    {
       for(int i=0;i<shapes.length;i++)
         shapes[i].draw();
    }
}

解释

shape类是一个抽象类,它包含getPerimeter,getArea和draw抽象方法.Rectangle类的draw方法应该在窗口中绘制矩形。

目标

在单独的窗口上绘制矩形,同时保持我的应用程序为其他方法的控制台。

1 个答案:

答案 0 :(得分:2)

建议:

  • 使用Swing GUI库,而不是AWT。
  • 您需要绘制一个扩展JPanel
  • 的类
  • 覆盖JPanel的protected void paintComponent(Graphics g)方法,并在此方法中进行绘制。
  • 请务必在覆盖范围内调用超级方法:super.paintComponent(g)
  • 然后在您想要的任何顶级Swing窗口内显示JPanel,但如果需要,则显示JApplet,JFrame,JDialog或其他JPanel内部。您可以通过init()
  • 在JApplet的add(myDrawingJPanel);方法中将此绘图JPanel添加到您的applet中

关于:

  

是否可以在不扩展Applet类的情况下使用applet?

不,我不这么认为。如果要创建GUI并将其显示在JApplet或Applet中,则必须覆盖该类,特别是覆盖其init()方法,并将GUI添加到该小程序中。

有关更具体的帮助,请考虑在问题中提供更多信息和代码。


修改
关于你的编辑:

  

这是一个控制台应用程序,我希望保持这样,但我也想在调用draw方法时绘制矩形,形状类不是必需的,它只是一个抽象类,没有实施方法。在夏天我想用一个小程序来绘制矩形,同时保持我的应用程序一个控制台(除了绘图)。任何帮助?

同样,如果你想绘制并显示它,你需要一个GUI,因此也可以创建和显示一个独立的GUI,如JFrame或JDialog,或者至少是一个JOptionPane中的JPanel。同样,不能不应在任何此类中使用applet。期。我以前的建议仍然有效。