В этой статье описывается симуляция планетарного движения, реализованного Java Programming. Поделитесь этим для вашей ссылки, следующим образом:
Языковое программирование Java, которое я с нетерпением ждал в течение долгого времени, также подошла к концу. Через несколько месяцев я в основном освоил простое использование Java, узнал основные базовые знания о Java, объектно-ориентированном мышлении, многопоточном управлении параллелизмом, дизайну интерфейса свинга, анимации и т. Д. Поэтому я рассмотрел вопрос о реализации простого программного обеспечения для моделирования планетарного движения. Основные идеи заключаются в следующем:
Анимация используется для имитации планетарного движения. На главной панели существует центральная планета, и нарисована эллиптическая орбита, и движущаяся планета движется вокруг центральной планеты. В то же время в нижнем правом углу установлена четыре кнопки, а именно «запуск», «пауза», «ускоряется» и «замедляет», которые могут привести к тому, что планеты перемещаются, паузу, ускоряются и замедляют соответственно.
1. Дизайн класса:
Звездные наследства от JPanel. Старший класс - это базовый класс планет, и все движущиеся планеты наследуются от звездного класса. Метод внутреннего розыгрыша () в основном рисует твердый круг, и цель состоит в том, чтобы гарантировать, что центральная планета всегда отображается каждый раз, когда ее нарисуют. Метод PaintComponent () переопределяет метод рисования jPanel, нацеленный на то, чтобы убедиться, что объекты экземпляров звезд, унаследованные от класса Star, могут нарисовать свои собственные планеты. следующее:
Stack Star; Import java.awt.color; Import java.awt.graphics; import javax.swing.jpanel; Public Class Star Extends jPanel { / *** Основной планетарный класс* / Частный статический конечный долгосрочный сериал. int x, y; ширина int, высота; public Star () {ширина = 10; высота = 10; } public Star (int x, int y) {this.x = x; this.y = y; ширина = 10; высота = 10; } public void Draw (Graphics G) {g.setColor (color.blue); G.Filloval (x, y, ширина, высота); } Protected void PaintComponent (Graphics G) {super.paintComponent (g); G.Filloval (x, y, ширина, высота); }}Класс звезд наследует от звездного класса, который является дальнейшим уточнением звездного класса, представляя движущиеся планеты. Альфа в классе звезд представляет собой начальный угол движущейся планеты, а скорость представляет скорость движения, которая может быть изменена. Long и Short представляют основную ось и незначительную ось эллиптической траектории соответственно. Центр представляет центральную планету своего создания объекта. Функция PaintComponent () переопределяет PaintComponent (), внутренне относится к функции Draw () родительского класса и рисует эллиптическую дорожку в соответствии с длинным, коротким и длинным и коротким, определяется объектом Commandiation, вызывающим конструктор. Функция перемещения () описывает уравнение изменения x и y, то есть изменения вокруг эллиптической орбиты, а также определяет способ изменения ALFA. Функция start () указывает начало потока, функция Pause () указывает на паузу потока, функция Acceleration () указывает на операцию ускорения на планете, а функция Decelerate () указывает операцию на замедлении планеты.
Целью класса Pthread является управление потоками, то есть начальное движение, пауза, ускорение и замедление планеты посредством экземпляра класса Pthread. Класс Pthread наследует из класса потоков и включен в класс Starts. Следовательно, класс Pthread не может быть определен как общий класс. Класс Pthread предоставляет метод run (), постоянно вызывает метод Repaint (), чтобы перекрасить изображение. Метод setSuspend () использует изменение логической переменной для приостановки потока (вызов метода notifyall ()). Поскольку класс Pthread является внутренним классом запуска, объект класса Pthread будет генерироваться в классе Starts, а поток будет работать с использованием этого объекта.
Дизайн заключается в следующем:
Пакет Star; Import java.awt.color; Import java.awt.graphics; открытый класс Stars Extends Star { / *** Перемещающаяся планета* / private static final long long serialversionuid = 1l; двойная альфа; двойная скорость; Звездный центр; int long; // Darken Axis int short; // Short Axis public Stars (int px, int py, Star Center) {super (px, py); this.center = center; Long = (px - center.x)*2; Short = (py - center.y)*2; this.setopaque (true); // move (); alfa = 0; скорость = 0,001; } Protected void PaintComponent (Graphics G) {super.paintComponent (g); center.draw (g); // Нарисуйте центральную точку перемещения (); g.setcolor (color.green); g.drawoval (center.x-long/2, center.y-short/2, long, короткий); } public void move () {x = center.x + (int) (long/2*math.cos (alfa)); y = center.y + (int) (short/2*math.sin (alfa)); // запустить Alfa по эллиптической траектории += скорость; // Угол постоянно меняется} Класс Pthread Extends Thread {// перекрасить потоковое класс Private Boolean Supesdend = true; частная строка Control = ""; public void run () {while (true) {synchronized (control) {if (survend) {// move (); Repaint (); }}}} public void setssopend (boolean s) {// установить метод паузы потока if (! survend) {synchronized (control) {control.notifyall (); }} this.suspend = s; }} public pthread pt = new pthread (); public void start () {pt.setsuspend (true); pt.start (); } public void pause () {pt.setsuspend (false); } public void Accelerate () {// Ускорить метод if (speed> 0) {// Угольное ускорение 0,0002 скорость += 0,0002; } else Speed = 0,001; } public void decelerate () {// Decelere Method if (speed> 0) {speed -= 0,0002; // замедление под каждым углом 0,0002} // Если скорость замедляется до 0, вы не можете продолжать замедляться. Скорость 0. Остановите движение, иначе скорость = 0; }}Класс Starframe является панелью стартапа этой программы. Суммируя этот класс, генерируется основной интерфейс программы, а на панель добавляются планетарные компоненты, кнопки и этикетки. Метод внутреннего getPanel () устанавливает две кнопки и возвращает JPanel (добавляет четыре кнопки в JPanel). Метод getLabel () возвращает Jlabel с буквальным описанием. Центральный объект представляет собой экземпляр звездного класса, а P1 является экземпляром класса звезд, представляющих центральную планету и орбитующую планету соответственно. JB1, JB2, JB3 и JB4 - это кнопки управления для запуска, приостановки, ускорения и замедления планеты соответственно. Изображение представляет фоновое изображение интерфейса, а LayeredPanel - это иерархическая панель интерфейса, которая облегчает настройку фонового изображения. JP, JL - это компонент, который устанавливает фоновое изображение. Дизайн заключается в следующем:
Stack Star; Import java.awt.borderlayout; import java.awt.color; import java.awt.font; import java.awt.event.actionevent; импорт java.awt.event.actionlistener; импорт javax.swing.imageicon; импорт javax.swing.jbutton; импорт. javax.swing.jlabel; import javax.swing.jlayeredpane; import javax.swing.jpanel; открытый класс Starframe расширяет jframe { / ***Панель запуска планетарного моделирования* / Частный статический окончательный конечный долгосрочный долг. Звездный центр = новая звезда (300 200); // Определить звезда центральной планеты P1 = новые звезды (300+230,200+130, в центре); // планета, окружающая центральные звезды P2 = новые звезды (300+230+20,200+130+20, p1); Jbutton jb1 = new jbutton ("start"); Jbutton jb2 = new jbutton ("пауза"); Jbutton jb3 = new jbutton ("accelerate"); Jbutton jb4 = new jbutton ("decelerate"); ImageICon Image = new ImageICon ("timg.jpg"); // Фоновое изображение, используйте относительный путь для определения JlayeredPane LayeredPane; // Определите иерархическую панель для размещения фоновых изображений JPanel JP; Jlabel JL; public starframe () {// установить позицию для P1 и размер P1.SetBounds (40,40,600 400); // p2.setbounds (40,40,600 400); // Определите фоновое изображение, поместите фоновое изображение в Jlabel, поместите Jlabel в JPanel LayeredPane = new JlayeredPane (); jp = new jpanel (); jp.setbounds (0,0, image.geticonwidth (), image.geticonheight ()); jl = new jlabel (image); JP.Add (JL); // Поместите JP в нижний слой. LayeredPane.Add (JP, JLayeredPane.default_layer); // положить jb на первое этаж LayeredPane.Add (P1, JlayeredPane.modal_layer); // layeredpane.add (p2, jlayeredpane.modal_layer); layeredpane.add (getPanel (), jlayeredpane.modal_layer); layeredpane.add (getLabel (), jlayeredpane.modal_layer); layeredpane.add (getLabel (), jlayeredpane.modal_layer); // Установить связанные действия для JB1, JB2, JB3 и JB4, соответственно, JB1.AdcationListener (new ActionListener () {public void actionPerformed (actionEvent e) {// Todo Auto Generated Method Speb P1.start ();}}); jb2.addactionListener (new ActionListener () {public void actionPerformed (actionEvent e) {// todo Автогенерированный метод stub p1.pause ();}}); jb3.addactionListener (new ActionListener () {public void actionPerformed (actionEvent e) {// TODO Автогенерированный метод stub p1.accelerate ();}}); jb4.addactionListener (new ActionListener () {public void actionPerformed (actionEvent e) {// TODO Автогенерированный метод stub p1.decelerate ();}}); this.SetLayeredPane (LayeredPane); this.setTitle ("Star"); this.SetBounds (100,100,1000 600); this.setDefaultCloseoPeration (jframe.exit_on_close); this.setvisible (true); } private jPanel getPanel () {// возвращать четыре кнопки, определенные JPanel jp = new jPanel (); JP.Add (JB1); JP.Add (JB2); JP.Add (JB3); JP.Add (JB4); JP.SetBounds (750,450,200,70); вернуть JP; } private jPanel getLabel () {// вернуть текст описание Jlabel JL = new Jlabel ("Planetary Simulation"); jl.setforeground (color.red); // установить цвет шрифта jl.setfont (new Font ("Dialog", 0,20)); // Установить шрифт jpanel jp = new jpanel (); JP.Add (JL, Borderlayout.center); JP.SetBounds (800,0,150,40); вернуть JP; } public static void main (string [] args) {@suppresswarnings ("unared") starframe f = new Starframe (); }}Эффект бега:
2. Объект:
Поскольку Java является объектно-ориентированным языком, конечно, он не может быть реализован по функциям, как язык C. Как не может быть объектов в структуре курса?
Основные объекты:
Объектный центр, то есть центральная планета
Объект P1, орбита на планете
Объект Pt, то есть объект, ответственный за управление потоком
Объект F, то есть панель запуска программы
3. Связь между объектами (взаимодействие)
Отношения между P1 и Center: Star Class является базовым классом планеты, унаследованной от JPanel, а основной радиус и координаты определяются внутри. Фактически, центр создания объекта является центром движущейся планеты. Класс звезд, унаследованные от Star, представляет собой движущуюся планету, которая является еще одним изысканностью. Следовательно, объект экземпляра P1 представляет движущуюся планету 1 и движется вокруг центра. В то же время центр передается в качестве параметра для P1 для завершения взаимодействия между ними. Это связь между объектом P1 и центром. После инстанции объектного центра, под указанными координатами будет проведен твердый круг, а координаты X и Y и Y не изменятся. На основании рисования твердого круга, объект P1 привлекает эллиптические орбиты указанной основной оси и незначительной оси в соответствии с координатами центра. В то же время он реализует класс потока внутренне, который не прерывает поток выполнения. Взаимное отношение наследования позволяет центру и P1 рисовать графики, не мешая друг другу. Стоит отметить, что в методе PaintComponent () в классе Stras метод Draw () центрального объекта все еще необходимо вызвать, поскольку поток будет вызывать метод Repaint () в начале. Если метод Draw () не реализован, конечный результат не будет показывать центральную планету.
Связь между PT и P1: класс Pthread наследует от класса потока и определяет метод run (). Сменьшаясь от объекта P1, метод start () может быть вызван для запуска потока. Класс Pthread находится внутри класса Starts, поэтому поток можно контролировать с помощью методов в P1, то есть он может контролировать свою скорость, ускорять и замедлять, и управлять, работает ли он или нет.
Отношения между F и каждым объектом: Starframe наследует от jframe. Фактически, объект Constantiation F добавляет каждый объект в холст, создает интерфейс и управляет размером и положением каждого компонента, который является ключом к работе программы.
4. Объектно-ориентированное понимание:
Все объект. Некоторые студенты спросили меня, что это за объект. Я ответил, что с новыми объектами являются объекты, а объекты - экземпляр классов. В этой программе бесчисленные планеты могут быть созданы, создав урок звезд (теоретически, да). Однако некоторые проблемы в реализации внутренних функций трудно решить. Главное - переписать метод PaintComponent (). После снова создания объекта метод снова будет переписан, поэтому возникает неизбежная проблема, которая также является сожалением, которое не может быть решено!
Для получения дополнительного контента, связанного с Java, читатели, заинтересованные в этом сайте, могут просмотреть темы: «Введение и расширенное учебное пособие по объектно-ориентированному программам Java», «Учебное пособие по структуре данных Java и алгоритм», «Суммарной навыки Java Dom Node», «Суммируют навыки работы навыков операции Java File File и Directory» и «Summary of Java CACEE CACEE».
Я надеюсь, что эта статья будет полезна для всех Java Programming.