Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2008, 20:57   #1
Mitron
Форумчанин
 
Аватар для Mitron
 
Регистрация: 10.05.2007
Сообщений: 117
По умолчанию Апплеты от Mitron'a

Когда мной была создана тема, решение будет выложено здесь, как и остальные мои работы.
Прошу обратить внимание "профессионалов", тему создаю для новичков в JAVA. Все притензии в ЛС.
Среда разработки Eclipse.
И так...
1. Виртуальный практикум.
Опыт по физике, измерение коэффициента вязкости жидкости.
Код:
public class ball extends Applet
 implements ActionListener, Runnable
{

 public ball()
 {
     timeOn = false;
     timerOn = false;
     timerValue = 0.0D;
     timeStep = 1.0D;
     firstStart = true;
     AppletOn = false;
     menuY = 0;
     time = 0.0D;
     mtimer = null;
     a = 1.0D;
     k = 1.0D;
     r = 2.5D;
 }

 void LoadGraphics()
 {
     MediaTracker mediatracker = new MediaTracker(this);
     showStatus("Loading images...");
     System.out.println("Loading images...");
     backgrnd = getImage(getDocumentBase(), "img/back.jpg");
     mediatracker.addImage(backgrnd, 1);
     lead1 = getImage(getDocumentBase(), "img/lead1.gif");
     mediatracker.addImage(lead1, 2);
     lead2 = getImage(getDocumentBase(), "img/lead2.gif");
     mediatracker.addImage(lead2, 3);
     lead3 = getImage(getDocumentBase(), "img/lead3.gif");
     mediatracker.addImage(lead3, 4);
     steel1 = getImage(getDocumentBase(), "img/steel1.gif");
     mediatracker.addImage(steel1, 5);
     steel2 = getImage(getDocumentBase(), "img/steel2.gif");
     mediatracker.addImage(steel2, 6);
     steel3 = getImage(getDocumentBase(), "img/steel3.gif");
     mediatracker.addImage(steel3, 7);
     try
     {
         mediatracker.waitForAll();
         System.out.println("loaded");
     }
     catch(InterruptedException _ex) { }
     showStatus("Ready");
 }

 public void actionPerformed(ActionEvent actionevent)
 {
     if(actionevent.getActionCommand().equals("Start") || actionevent.getActionCommand().equals("Start position"))
     {
         double d;
         if(gr_ball.getCurrent().getLabel().equals("lead"))
         {
             d = 11.4D;
             ball1 = lead1;
             ball2 = lead2;
             ball3 = lead3;
         } else
         {
             d = 7.7999999999999998D;
             ball1 = steel1;
             ball2 = steel2;
             ball3 = steel3;
         }
         double d1;
         double d2;
         if(gr_liquid.getCurrent().getLabel().equals("glycerine"))
         {
             d1 = 1.26D;
             if(temperature.getCurrent().getLabel().equals("T=283K"))
                 d2 = 3950D;
             else
             if(temperature.getCurrent().getLabel().equals("T=293K"))
                 d2 = 1480D;
             else
             if(temperature.getCurrent().getLabel().equals("T=303K"))
                 d2 = 600D;
             else
             if(temperature.getCurrent().getLabel().equals("T=313K"))
                 d2 = 330D;
             else
                 d2 = 180D;
         } else
         {
             d1 = 0.95999999999999996D;
             d2 = 987D;
         }
         r = (double)Math.round(15D + 10D * Math.random()) / 10D;
         piccoef = 50D / r / 18D;
         a = (1.0D - d1 / d) * 9.8100000000000005D;
         k = (450D * d2) / r / r / d;
         if(rEdit != null)
             rEdit.setText(String.valueOf(r));
     }
     if(actionevent.getActionCommand().equals("Start"))
     {
         if(firstStart)
             firstStart = false;
         time = 0.0D;
         start();
     } else
     if(actionevent.getActionCommand().equals("Start position"))
     {
         time = 0.0D;
         timerValue = 0.0D;
         timerValueEdit.setText("0");
         stop();
     } else
     if(actionevent.getActionCommand().equals("Timer"))
     {
         if(timerOn)
         {
             timerOn = false;
         } else
         {
             timerValue = 0.0D;
             timerOn = true;
         }
     } else
     if(actionevent.getActionCommand().equals("Stop"))
     {
         stop();
         timerOn = false;
     }
     recalc();
     repaint();
 }
....
Задачи на заказ

Блажен тот, кто ничего не знает: он не рискует быть не понятым.
Mitron вне форума Ответить с цитированием
Старый 13.12.2008, 20:58   #2
Mitron
Форумчанин
 
Аватар для Mitron
 
Регистрация: 10.05.2007
Сообщений: 117
По умолчанию

Код:
public void init()
 {
     setLayout(null);
     setSize(570, 450);
     setBackground(new Color(0xc0c0c0));
     menuY += 5;
     StartButton = new Button();
     StartButton.setLabel("Start");
     StartButton.setBounds(5, menuY, 50, 20);
     StartButton.setBackground(new Color(0xc0c0c0));
     StartButton.addActionListener(this);
     add(StartButton);
     StopButton = new Button();
     StopButton.setLabel("Stop");
     StopButton.setBounds(65, menuY, 50, 20);
     StopButton.setBackground(new Color(0xc0c0c0));
     StopButton.addActionListener(this);
     add(StopButton);
     menuY += 30;
     TimerButton = new Button();
     TimerButton.setLabel("Timer");
     TimerButton.setBounds(5, menuY, 50, 20);
     TimerButton.setBackground(new Color(0xc0c0c0));
     TimerButton.addActionListener(this);
     add(TimerButton);
     timerValueEdit = new TextField();
     timerValueEdit.setEditable(false);
     timerValueEdit.setText("0");
     timerValueEdit.setBounds(65, menuY, 50, 20);
     add(timerValueEdit);
     menuY += 30;
     ResetButton = new Button();
     ResetButton.setLabel("Start position");
     ResetButton.setBounds(5, menuY, 110, 20);
     ResetButton.setBackground(new Color(0xc0c0c0));
     ResetButton.addActionListener(this);
     add(ResetButton);
     menuY += 30;
     timeStep = 12D;
     gr_ball = new CheckboxGroup();
     gr_liquid = new CheckboxGroup();
     temperature = new CheckboxGroup();
     lead = new Checkbox("lead", gr_ball, true);
     steel = new Checkbox("steel", gr_ball, false);
     glycerine = new Checkbox("glycerine", gr_liquid, true);
     kerosene = new Checkbox("castor oil", gr_liquid, false);
     t1 = new Checkbox("T=283K", temperature, true);
     t2 = new Checkbox("T=293K", temperature, false);
     t3 = new Checkbox("T=303K", temperature, false);
     t4 = new Checkbox("T=313K", temperature, false);
     t5 = new Checkbox("T=323K", temperature, false);
     lead.setBounds(5, menuY, 100, 15);
     menuY += 30;
     steel.setBounds(5, menuY, 100, 15);
     menuY += 30;
     glycerine.setBounds(5, menuY, 100, 15);
     menuY += 30;
     kerosene.setBounds(5, menuY, 100, 15);
     menuY += 30;
     t1.setBounds(5, menuY, 100, 15);
     menuY += 30;
     t2.setBounds(5, menuY, 100, 15);
     menuY += 30;
     t3.setBounds(5, menuY, 100, 15);
     menuY += 30;
     t4.setBounds(5, menuY, 100, 15);
     menuY += 30;
     t5.setBounds(5, menuY, 100, 15);
     menuY += 30;
     add(lead);
     add(steel);
     add(glycerine);
     add(kerosene);
     add(t1);
     add(t2);
     add(t3);
     add(t4);
     add(t5);
     rLabel = new Label("r (10^-4 m)");
     rLabel.setBounds(5, menuY, 55, 15);
     add(rLabel);
     rEdit = new TextField();
     rEdit.setEditable(false);
     rEdit.setText("2.5");
     rEdit.setBounds(65, menuY, 50, 20);
     add(rEdit);
     menuY += 30;
     heightLabel = new Label("height (cm)");
     heightLabel.setBounds(5, menuY, 50, 15);
     add(heightLabel);
     HeightEdit = new TextField();
     HeightEdit.setText("0");
     HeightEdit.setBounds(65, menuY, 50, 17);
     add(HeightEdit);
     menuY += 30;
     backbuf = createImage(570, 450);
     LoadGraphics();
     ball1 = lead1;
     ball2 = lead2;
     ball3 = lead3;
     r = (double)Math.round(15D + 10D * Math.random()) / 10D;
     piccoef = 50D / r / 18D;
     recalc();
 }

 public void paint(Graphics g)
 {
     g.translate(120, 0);
     g.drawImage(backgrnd, 0, 0, this);
     if((48D - r * 18D) + x * 294D < 22D)
         g.drawImage(ball1, (int)(235D - r * 9D), (int)((48D - r * 18D) + x * 294D), 
(int)(235D + r * 9D), 23, 0, 0, ball1.getWidth(this), (int)(((-25D + r * 18D) - x * 294D) * piccoef), this);
     if((48D - r * 18D) + x * 294D <= 22D)
         g.drawImage(ball2, (int)(235D - r * 9D), 23, (int)(235D + r * 9D), 48, 0, 
(int)(((-25D + r * 18D) - x * 294D) * piccoef), ball1.getWidth(this), (int)((r * 18D - x * 294D) * piccoef), this);
     else
     if(-r * 18D + x * 294D < -1D)
         g.drawImage(ball2, (int)(235D - r * 9D), (int)((48D - r * 18D) + x * 294D), 
(int)(235D + r * 9D), 48, 0, 0, ball1.getWidth(this), (int)((r * 18D - x * 294D) * piccoef), this);
     if(-r * 18D + x * 294D < 0.0D)
         g.drawImage(ball3, (int)(235D - r * 9D), 48, (int)(235D + r * 9D), (int)(48D + x * 294D), 0, 
(int)((r * 18D - x * 294D) * piccoef), ball1.getWidth(this), ball1.getHeight(this), this);
     else
         g.drawImage(ball3, (int)(235D - r * 9D), (int)((48D - r * 18D) + x * 294D), (int)(235D + r * 9D), 
(int)(48D + x * 294D), 0, 0, ball1.getWidth(this), ball1.getHeight(this), this);
     g.setColor(new Color(0, 0, 0));
 }
...
Задачи на заказ

Блажен тот, кто ничего не знает: он не рискует быть не понятым.

Последний раз редактировалось Mitron; 13.12.2008 в 21:05.
Mitron вне форума Ответить с цитированием
Старый 13.12.2008, 21:03   #3
Mitron
Форумчанин
 
Аватар для Mitron
 
Регистрация: 10.05.2007
Сообщений: 117
По умолчанию

Код:
void recalc()
 {
     x = ((a / k / k) * Math.exp(-k * time) + (a / k) * time) - a / k / k;
     if(x > 1.1499999999999999D)
         x = 1.1499999999999999D;
     Double double1 = new Double(x);
     if(HeightEdit != null)
         HeightEdit.setText(double1.toString());
 }

 public void run()
 {
     do
         try
         {
             if(timeOn)
                 time += timeStep;
             if(timerOn)
             {
                 timerValue += timeStep;
                 timerValue = (double)Math.round(timerValue * 10D) / 10D;
                 timerValueEdit.setText(String.valueOf(timerValue));
             }
             recalc();
             repaint();
             Thread.sleep(100L);
         }
         catch(InterruptedException _ex)
         {
             stop();
         }
     while(true);
 }

 public void start()
 {
     if(!firstStart)
     {
         timeOn = true;
         if(mtimer == null)
         {
             mtimer = new Thread(this);
             mtimer.start();
         }
     }
 }

 public void stop()
 {
     if(mtimer != null)
     {
         mtimer.stop();
         mtimer = null;
     }
 }

 public void update(Graphics g)
 {
     paint(backbuf.getGraphics());
     g.drawImage(backbuf, 0, 0, this);
 }

 private Button StartButton;
 private Button StopButton;
 private Button ResetButton;
 private Button TimerButton;
 private TextField timerValueEdit;
 private boolean timeOn;
 protected boolean timerOn;
 protected double timerValue;
 protected double timeStep;
 private static final int WIDTH = 450;
 private static final int HEIGHT = 450;
 private static final int TaskBar = 120;
 private boolean firstStart;
 private boolean AppletOn;
 private int oldX;
 private int oldY;
 protected int menuY;
 protected double time;
 Image backbuf;
 Thread mtimer;
 Checkbox lead;
 Checkbox steel;
 Checkbox glycerine;
 Checkbox kerosene;
 Checkbox t1;
 Checkbox t2;
 Checkbox t3;
 Checkbox t4;
 Checkbox t5;
 CheckboxGroup gr_ball;
 CheckboxGroup gr_liquid;
 CheckboxGroup temperature;
 Label rLabel;
 TextField rEdit;
 Label heightLabel;
 TextField HeightEdit;
 double a;
 double k;
 double r;
 final double nk = 987D;
 final double ng1 = 3950D;
 final double ng2 = 1480D;
 final double ng3 = 600D;
 final double ng4 = 330D;
 final double ng5 = 180D;
 final double rg = 1.26D;
 final double rk = 0.95999999999999996D;
 final double rl = 11.4D;
 final double rs = 7.7999999999999998D;
 double piccoef;
 Image backgrnd;
 Image lead1;
 Image lead2;
 Image lead3;
 Image steel1;
 Image steel2;
 Image steel3;
 Image ball1;
 Image ball2;
 Image ball3;
 double x;
}
Изображеня прикрепил )
Вложения
Тип файла: zip img.zip (77.8 Кб, 23 просмотров)
Задачи на заказ

Блажен тот, кто ничего не знает: он не рискует быть не понятым.
Mitron вне форума Ответить с цитированием
Старый 14.12.2008, 15:03   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Тестировал в NetBeans IDE 6.1 - работает отлично.
MaTBeu вне форума Ответить с цитированием
Старый 15.12.2008, 08:43   #5
Mitron
Форумчанин
 
Аватар для Mitron
 
Регистрация: 10.05.2007
Сообщений: 117
По умолчанию

После того, как был сделан этот апплет, у меня возникла мысль сделать это в 3D.
Но как-то не хватило время.
Суть идеи была следующая: из готовых 3D моделей(*.obj) создать сцену.
А все остальное пойдет как помаслу ))
Вобщем, нашими(моими и гугла ) усилиями был создан следующий апплет, способный загружать и обрабатывать 3D модль.
Код:
import java.applet.Applet;
import java.awt.FlowLayout;
import java.awt.GraphicsConfiguration;
import java.net.URL;
import java.util.Enumeration;
import java.util.Hashtable;

import javax.media.j3d.AmbientLight;
import javax.media.j3d.Appearance;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Material;
import javax.media.j3d.RenderingAttributes;
import javax.media.j3d.Shape3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.TransparencyAttributes;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;

import com.sun.j3d.loaders.Scene;
import com.sun.j3d.loaders.objectfile.ObjectFile;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.behaviors.keyboard.KeyNavigatorBehavior;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.behaviors.mouse.MouseTranslate;
import com.sun.j3d.utils.universe.SimpleUniverse;

public class ObjectLoader extends Applet {

	protected Canvas3D c1 = new Canvas3D(SimpleUniverse
			.getPreferredConfiguration());

	private static MainFrame mf;

	protected SimpleUniverse u = null;

	protected BranchGroup scene = null;

	
	protected String URLString = "file:///home/mitron/table.obj";

	protected float eyeOffset = 0.03F;

	protected static int size = 800;

	public void init() {
		setLayout(new FlowLayout());
		GraphicsConfiguration config = SimpleUniverse
				.getPreferredConfiguration();
		String v = getParameter("url");
		if (v != null) {
			URLString = v;
		}
		c1.setSize(size, size);
		add(c1);
		scene = createSceneGraph(0);
		u = new SimpleUniverse(c1);
		u.addBranchGraph(scene);

	}
...
Задачи на заказ

Блажен тот, кто ничего не знает: он не рискует быть не понятым.
Mitron вне форума Ответить с цитированием
Старый 15.12.2008, 08:44   #6
Mitron
Форумчанин
 
Аватар для Mitron
 
Регистрация: 10.05.2007
Сообщений: 117
По умолчанию

Код:
public BranchGroup createSceneGraph(int i) {
		System.out.println("Creating scene for: " + URLString);
		// Create the root of the branch graph
		BranchGroup objRoot = new BranchGroup();
		try {
			Transform3D myTransform3D = new Transform3D();
			myTransform3D.setTranslation(new Vector3f(+0.0f, -0.15f, -3.6f));
			TransformGroup objTrans = new TransformGroup(myTransform3D);
			objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
			Transform3D t = new Transform3D();
			TransformGroup tg = new TransformGroup(t);
			tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
			tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
			objTrans.addChild(tg);
			URL url = new URL(URLString);
			ObjectFile f = new ObjectFile();
			f.setFlags(ObjectFile.RESIZE | ObjectFile.TRIANGULATE
					| ObjectFile.STRIPIFY);
			System.out.println("About to load");

			Scene s = f.load(url);
			Transform3D myTrans = new Transform3D();
			myTrans.setTranslation(new Vector3f(eyeOffset, -eyeOffset, 0F));
			TransformGroup mytg = new TransformGroup(myTrans);
			tg.addChild(mytg);
			Transform3D myTrans2 = new Transform3D();
			myTrans2.setTranslation(new Vector3f(-eyeOffset, +eyeOffset, 0F));
			TransformGroup mytg2 = new TransformGroup(myTrans2);
			Hashtable table = s.getNamedObjects();
			for (Enumeration e = table.keys(); e.hasMoreElements();) {
				Object key = e.nextElement();
				System.out.println(key);
				Object obj = table.get(key);
				System.out.println(obj.getClass().getName());
				Shape3D shape = (Shape3D) obj;
				Appearance ap = new Appearance();
				Color3f black = new Color3f(0.0f, 0.0f, 0.0f);
				Color3f red = new Color3f(0.7f, .0f, .15f);
				Color3f green = new Color3f(0f, .7f, .15f);
				ap.setMaterial(new Material(green, black, green, black, 1.0f));
				Appearance ap2 = new Appearance();
				ap2.setMaterial(new Material(red, black, red, black, 1.0f));
				float transparencyValue = 0.5f;
				TransparencyAttributes t_attr = new TransparencyAttributes(
						TransparencyAttributes.BLENDED, transparencyValue,
						TransparencyAttributes.BLEND_SRC_ALPHA,
						TransparencyAttributes.BLEND_ONE);
				ap2.setTransparencyAttributes(t_attr);
				ap2.setRenderingAttributes(new RenderingAttributes());
				ap.setTransparencyAttributes(t_attr);
				ap.setRenderingAttributes(new RenderingAttributes());
				shape.setAppearance(ap);
				mytg2.addChild(new Shape3D(shape.getGeometry(), ap2));
				mytg.addChild(new Shape3D(shape.getGeometry(), ap));
			}
			tg.addChild(mytg2);
			System.out.println("Finished Loading");
			BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0,
					0.0), 100.0);
			Color3f light1Color = new Color3f(.9f, 0.9f, 0.9f);
			Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
			DirectionalLight light1 = new DirectionalLight(light1Color,
					light1Direction);
			light1.setInfluencingBounds(bounds);
			objTrans.addChild(light1);
			// Set up the ambient light
			Color3f ambientColor = new Color3f(1.0f, .4f, 0.3f);
			AmbientLight ambientLightNode = new AmbientLight(ambientColor);
			ambientLightNode.setInfluencingBounds(bounds);
			objTrans.addChild(ambientLightNode);

			MouseRotate behavior = new MouseRotate();
			behavior.setTransformGroup(tg);
			objTrans.addChild(behavior);
			// Create the translate behavior node
			MouseTranslate behavior3 = new MouseTranslate();
			behavior3.setTransformGroup(tg);
			objTrans.addChild(behavior3);
			behavior3.setSchedulingBounds(bounds);

			KeyNavigatorBehavior keyNavBeh = new KeyNavigatorBehavior(tg);
			keyNavBeh.setSchedulingBounds(new BoundingSphere(new Point3d(),
					1000.0));
			objTrans.addChild(keyNavBeh);

			behavior.setSchedulingBounds(bounds);
			objRoot.addChild(objTrans);
		} catch (Throwable t) {
			System.out.println("Error: " + t);
		}
		return objRoot;
	}

	public ObjectLoader() {
	}

	public void destroy() {
		u.removeAllLocales();
	}

	public static void main(String[] args) {

		ObjectLoader s = new ObjectLoader();
		if (args.length > 0) {
			s.URLString = args[0];
		}
		mf = new MainFrame(s, size, size);
	}
}
Задачи на заказ

Блажен тот, кто ничего не знает: он не рискует быть не понятым.
Mitron вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обновление в блоге - Апплеты в панеле управления Pblog Обсуждение статей 0 27.05.2007 03:17