Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Апплеты > Вывод подписей к рискам в апплете на графике


Автор: Demon2009 19.3.2009, 23:06
Помогите пожайлуста с Java-апплетом!!!

Джавой (Javой) я занимаюсь не первый день, но апплеты начал учить недавно. 

У меня есть апплет Построение графика функции sin(x) * cos(2*x).

Мне нужно сделать так, чтобы из HTML файла были получены параметры левой и правой границы диапазона с помощью метода getParameter(). Затем эти значения должны быть выведены на экран  и между left и right должны находиться значения, которые отличаются от параметра left на некоторый шаг (некоторое число) допустим на 5.

Например:

Если  left="20", right="60". То в результате диапазон должен выглядеть следующим образом: 20 25 30 и т.д.  и так до 60 по оси x.

И каждая подпись к риске (число(значение)) должна размещаться строго по опеределённым координатам под каждой риской. 
Координаты должны вычисляться по обоим осям (x и y) в соответствии с шагом step и определёнными заданными значениями переменных x_new и y_new. 

Как изменить диапазон по оси x и по оси y и вывести его на экран с помощью drawString() по соответствующим координатам используя step и x_new или y_new? 
Как реализовать полностью работоспособный апплет? 
Есть ли в аппелете ошибки и в чём они заключаются?

Пожайлуста напишите код со всеми исправлениями или хотя бы что-нибудь посоветуйте. Искал везде где только можно. Ничего найти похожего не смог.

Вот мой код java-апплета:

Код

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

public class Function2 extends Applet
{  
    int left, right;
    static double a = 1.0D;
    static double b = 1.0D;
    int x_new;
    int y_new;
    int x;
    int y;
    int width;
    int height;
     
    public Function2()
    {
        x_new = 300;
        y_new = 200;
    }

    public void init()
    {
        super.init();
        Color background = getColorParameter("background");
        if (background != null)
        this.setBackground(background);
        if (background == null) 
        setBackground (Color.yellow); 
         String param = new String();
         param = getParameter("left");
         try {
         if (param != null)
            left = Integer.parseInt(param);
         else
            left = 0;
        } catch (NumberFormatException e)
        { left = -1; }
        if (left != 0) 
        left=Integer.parseInt(getParameter("left")); 
         param = getParameter("right");
         try {
         if (param != null)
            right = Integer.parseInt(param);
         else
            right = 0;
        } catch (NumberFormatException e)
        { right = -1; }
        if (right != 0) 
        right=Integer.parseInt(getParameter("right")); 
        setLayout(null);
        Color color = new Color(255, 220, 220);
    }
 
    protected Color getColorParameter(String name) 
    {
      String value = this.getParameter(name);
      try 
    {
      return new Color(Integer.parseInt(value, 16)); 
    }
      catch (Exception e) 
    {
      return null;
    }
    }


    public void paint(Graphics g)
    {
        int step;
        int chislo1 = 12;
        int chislo2 = 6;
        g.setColor(Color.red);
        char c1 = '\226';
        g.setColor(new Color(c1, c1, c1));
        c1 = '|';
        g.setColor(new Color(c1, c1, c1));

// Это требуется изменить

        step = right - left / chislo2;

        for(y = 0; y <= 6; y++)
        {
        g.drawLine(x_new - 5, (y_new + 150) - 50 * y, x_new + 5, (y_new + 150) - 50 * y);
        height = left + step * y;
        g.drawString(String.valueOf(height), 300 + step * y, x_new-250);
        }
        
        step = right - left / chislo1;

        for(x = 0; x <= 12; x++) 
        {
        g.drawLine((x_new + 300) - 50 * x, y_new - 5, (x_new + 300) - 50 * x, y_new + 5);
        width = left + step * x;
        g.drawString(String.valueOf(width), 0 + step * x, y_new + 20);
        } 


        g.setColor(Color.black);
        g.drawLine(x_new - 300, y_new, x_new + 300, y_new);
        g.drawLine(x_new, y_new - 180, x_new, y_new + 180);
        g.setFont(new Font("SansSerif", 14, 12));
        g.drawLine(295,35,300,15); 
        g.drawLine(305,35,300,15); 
        g.drawString("y", 285, 40);
        g.drawLine(585,195,605,200); 
        g.drawLine(585,205,605,200); 
        g.drawString("x", 580, 214); 
        g.setColor(Color.black);
        g.drawLine(132, 2, 132, 2);
        double x = -30D;
        g.setColor(Color.red);
        do
        {
            if(x > 30D)
                break;
            double f = a * (Math.sin(x) + Math.cos(2D * x * b));
            x += 0.001D;
            int i1 = (int)(x * 10D + 300D);
            int j1 = (int)(-f * 10D + 200D);
            if(j1 >= 20 && j1 <= 380)
                g.drawLine(i1, j1, i1 + 1, j1);
        } while(true);
    }
}


Вот код HTML-файла, в который встраивается апплет:

Код

<html>
<head>
<title>
</title>
</head>
<body>
<center>
<applet code="Function2.class" width="610" height="390">
<param name="background" value="FFFF00">
<param name="left" value="20">
<param name="right" value="60">
</applet>
</center>
</body>
</html>


Заранее спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)