我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 这程序怎么不能显示啊! 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

Optimist



性别: 帅哥 状态: 该用户目前不在线
头衔: ★开始学编程★
等级: 荣誉会员
家族: 梦魇图腾
发贴: 5962
威望: 6
浮云: 346
在线等级:
注册时间: 2006-04-14
最后登陆: 2009-09-20

5come5帮你背单词 [ scream /skri:m/ v. & n. 尖叫 ]


这程序怎么不能显示啊!

Quote:

/*
  <applet code="Chart.class" width="300" height="200">
  </applet>
*/


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

public class Chart extends JApplet
{
   public void init()
   {
      String v=getParameter("values");
      if(v==null) return;
      int n=Integer.parseInt(v);
      double[] values=new double[n];
      String[] names=new String[n];
      for (int i=0;i<n ;i++ )
      {
          values=Double.parseDouble(getParameter("values."+(i+1)));
          names=getParameter("name."+(i+1));
      }
      add(new ChartPanel(values, names, getParameter("title")));
   }
}

class ChartPanel extends JPanel
{
   public ChartPanel(double[] v,String[] n,String t)
   {
      values=v;
      names=n;
      title=t;
   }
   public void paintComponent(Graphics g)
   {
      super.paintComponent(g);
      Graphics2D g2=(Graphics2D) g;
      if(values==null) return;
      double minValue=0;
      double maxValue=0;
      for (double v : values )
      {
          if(minValue>v) minValue=v;
          if(maxValue<v) maxValue=v;
      }
      if(maxValue==minValue) return;
      int panelWidth=getWidth();
      int panelHeight=getHeight();
      Font titleFont=new Font("SansSerif",Font.BOLD,20);
      Font labelFont=new Font("SansSerif",Font.PLAIN,10);
      FontRenderContext context=g2.getFontRenderContext();
      Rectangle2D titleBounds=titleFont.getStringBounds(title,context);
      double titleWidth=titleBounds.getWidth();
      double top=titleBounds.getHeight();
      double y=-titleBounds.getY();
      double x=(panelWidth-titleWidth)/2;
      g2.setFont(titleFont);
      g2.drawString(title,(float) x,(float) y);
      LineMetrics labelMetrics=labelFont.getLineMetrics("",context);
      double bottom=labelMetrics.getHeight();
      y=panelHeight-labelMetrics.getDescent();
      g2.setFont(labelFont);
      double scale=(panelHeight-top-bottom)/(maxValue-minValue);
      int barWidth=panelWidth/values.length;
      for (int i=0;i<values.length ;i++ )
      {
          double x1=i*barWidth+1;
          double y1=top;
          double height=values*scale;
          if(values>=0) y1+=(maxValue-values)*scale;
          else
          {
            y1+=maxValue*scale;
            height=-height;
          }
       Rectangle2D rect=new Rectangle2D.Double(x1,y1,barWidth-2,height);
       g2.setPaint(Color.RED);
       g2.fill(rect);
       g2.setPaint(Color.BLACK);
       g2.draw(rect);
       Rectangle2D labelBounds=labelFont.getStringBounds(names,context);
       double labelWidth=labelBounds.getWidth();
       x=x1+(barWidth-labelWidth)/2;
       g2.drawString(names,(float) x,(float) y);
      }
   }
   private double[] values;
   private String[] names;
   private String title;
}
顶端 Posted: 2006-12-22 20:41 | [楼 主]
ipod



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 992
威望: 0
浮云: 1452
在线等级:
注册时间: 2006-04-24
最后登陆: 2010-07-07

5come5帮你背单词 [ such /sΛt/ a. 如此的,这一类的,如此,这样;pron. 这样的人(或事物) ]


你直接运行那当然不能显示,此applet没有主函数。
嵌套到html里面就可以了:
将Chart.java编译以后声称Chart.class
在Chart.class的同一目录下建立Chart.html文件
code:

<html>
<body>
<title>Chart Applet</title>
<applet code="Chart.class" width="300" height="200">
</applet>
</body>
</html>
顶端 Posted: 2006-12-22 21:59 | [1 楼]
Optimist



性别: 帅哥 状态: 该用户目前不在线
头衔: ★开始学编程★
等级: 荣誉会员
家族: 梦魇图腾
发贴: 5962
威望: 6
浮云: 346
在线等级:
注册时间: 2006-04-14
最后登陆: 2009-09-20

5come5帮你背单词 [ bullet /'bulit/ n. 子弹 ]


不是这个问题
这个方法等于你说的方法
编译完全通过
运行也可以就是不能显示
顶端 Posted: 2006-12-22 22:04 | [2 楼]
Optimist



性别: 帅哥 状态: 该用户目前不在线
头衔: ★开始学编程★
等级: 荣誉会员
家族: 梦魇图腾
发贴: 5962
威望: 6
浮云: 346
在线等级:
注册时间: 2006-04-14
最后登陆: 2009-09-20

5come5帮你背单词 [ heavenly // a. 天国的,天空的,天的 ]


运行会产生applet
顶端 Posted: 2006-12-22 22:04 | [3 楼]
ipod



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 992
威望: 0
浮云: 1452
在线等级:
注册时间: 2006-04-24
最后登陆: 2010-07-07

5come5帮你背单词 [ theoretical /θiə'retikəl/ a. 理论的,理论上的 ]


。。。。


[ 此贴被ipod在2006-12-22 23:45重新编辑 ]
顶端 Posted: 2006-12-22 23:35 | [4 楼]
ipod



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 992
威望: 0
浮云: 1452
在线等级:
注册时间: 2006-04-24
最后登陆: 2010-07-07

5come5帮你背单词 [ thermometer ə'momitə/ n. 温度计 ]


细看了一下楼主的代码


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

public class Chart extends JApplet
{
  public void init()
  {
    String v=getParameter("values");
    if(v==null) return;
    int n=Integer.parseInt(v);
    double[] values=new double[n]; // 你这样定义导致了以下很多错误!
    String[] names=new String[n]; // 你这样定义导致了以下很多错误!
    for (int i=0;i<n ;i++ )
    {
      values=Double.parseDouble(getParameter("values."+(i+1))); //错误1:double不能和double[]转换
      names=getParameter("name."+(i+1));//错误1:String不能和String[]转换
    }
    add(new ChartPanel(values, names, getParameter("title")));
  }
}

class ChartPanel extends JPanel
{
  public ChartPanel(double[] v,String[] n,String t)
  {
    values=v;
    names=n;
    title=t;
  }
  public void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    Graphics2D g2=(Graphics2D) g;
    if(values==null) return;
    double minValue=0;
    double maxValue=0;
    for (double v : values ) //我的Java 6无法识别你这种写法是正确的
    {
      if(minValue>v) minValue=v;
      if(maxValue<v) maxValue=v;
    }
    if(maxValue==minValue) return;
    int panelWidth=getWidth();
    int panelHeight=getHeight();
    Font titleFont=new Font("SansSerif",Font.BOLD,20);
    Font labelFont=new Font("SansSerif",Font.PLAIN,10);
    FontRenderContext context=g2.getFontRenderContext();
    Rectangle2D titleBounds=titleFont.getStringBounds(title,context);
    double titleWidth=titleBounds.getWidth();
    double top=titleBounds.getHeight();
    double y=-titleBounds.getY();
    double x=(panelWidth-titleWidth)/2;
    g2.setFont(titleFont);
    g2.drawString(title,(float) x,(float) y);
    LineMetrics labelMetrics=labelFont.getLineMetrics("",context);
    double bottom=labelMetrics.getHeight();
    y=panelHeight-labelMetrics.getDescent();
    g2.setFont(labelFont);
    double scale=(panelHeight-top-bottom)/(maxValue-minValue);
    int barWidth=panelWidth/values.length;
    for (int i=0;i<values.length ;i++ )
    {
      double x1=i*barWidth+1;
      double y1=top;
      double height=values*scale; // 错误三:定义为double[]的Values可以使用"*"号?
      if(values>=0) y1+=(maxValue-values)*scale; //错误四: 定义为double[]的Values可以使用">="号?
      else
      {
        y1+=maxValue*scale;
        height=-height;
      }
    Rectangle2D rect=new Rectangle2D.Double(x1,y1,barWidth-2,height);
    g2.setPaint(Color.RED);
    g2.fill(rect);
    g2.setPaint(Color.BLACK);
    g2.draw(rect);
    Rectangle2D labelBounds=labelFont.getStringBounds(names,context);// 错误五:names定义错误。、,不能为String[]
    double labelWidth=labelBounds.getWidth();
    x=x1+(barWidth-labelWidth)/2;
    g2.drawString(names,(float) x,(float) y);//错误六:names定义错误。、,不能为String[]
    }
  }
  private double[] values;// 错误的根源!
  private String[] names;// 错误的根源!
  private String title;
}


[ 此贴被ipod在2006-12-23 00:06重新编辑 ]
顶端 Posted: 2006-12-22 23:38 | [5 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.008654(s) query 5, Time now is:11-23 19:22, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号