U ovom tutorijalu ćete naučiti kako da pripremite razvojno okruženje za izradu fizičkih simulacija u Javi, koristeći IntelliJ IDEA i ACM biblioteku, pre nego što pređemo na sam OSP framework. Cilj je da korak po korak prođete kroz ceo proces – od instalacije IDE-a, preko kreiranja novog projekta, do pisanja prve aplikacije koja simulira matematičko klatno bez upotrebe OSP klasa.
acm.jar
u vaš projekat, kako biste koristili grafičke i interaktivne komponente koje pruža ACM (Stanford CS) biblioteka.GraphicsProgram
.Nakon što uspešno savladate ovaj uvodni deo, bićete spremni za prelazak na korišćenje Open Source Physics (OSP) biblioteka i kreiranje naprednijih 2D i 3D simulacija.
.exe
fajl i pratite korake instalera:
Configure → Project SDK → Add SDK
i navedite putanju do JDK.A) Preko zvaničnog .tar.gz
cd ~/Downloads
tar -xzf ideaIC-*.tar.gz
sudo mv idea-IC-* /opt/idea-community
sudo tee /usr/local/bin/idea << 'EOF'
#!/usr/bin/env bash
/opt/idea-community/bin/idea.sh "$@"
EOF
sudo chmod +x /usr/local/bin/idea
Sada možete pokretati IntelliJ komandno sa idea
.
B) Preko Snap (Ubuntu, Mint…)
sudo snap install intellij-idea-community --classic
File → Settings → Plugins
, pretražite “Educational” i instalirajte JetBrains Academy ili Educational plugin.Pre nego što se upustite u razvoj vaših simulacija ili drugih Java projekata, neophodno je da pravilno podesite razvojno okruženje. Sledeći koraci će vas provesti kroz osnovna podešavanja IntelliJ IDEA: od integracije JDK-a, preko instalacije dodatnih plugin-ova, do prilagođavanja tastaturskih prečica i teme.
Prvi i najvažniji korak je dodavanje lokalno instaliranog Java Development Kita (JDK) u IntelliJ IDEA. Ovo omogućava kompajliranje i pokretanje vaših Java aplikacija.
File → Settings → Build, Execution, Deployment → SDKs
IntelliJ IDEA → Preferences → Build, Execution, Deployment → SDKs
+ → Add SDK → JDK
.bin
, lib
itd.):
C:\Program Files\Java\jdk-11.0.12
(Windows)/usr/lib/jvm/java-11-openjdk
(Linux)Project Structure → Project
i u polju Project SDK izaberite upravo dodat JDK.Da biste radili sa drugim jezicima i alatima unutar IntelliJ IDEA, potrebno je da instalirate odgovarajuće plugin-ove.
File → Settings → Plugins
(ili IntelliJ IDEA → Preferences → Plugins
).IntelliJ IDEA omogućava izbor između više preddefinisanih keymap-ova i grafičkih tema, kako bi radno okruženje bilo što prijatnije.
Settings → Keymap
– izaberite “Default”, “Eclipse”, “Visual Studio” ili drugi layout.Settings → Appearance & Behavior → Theme
– odaberite “Darcula” (tamna) ili “IntelliJ Light”.
Ako ste instalirali IntelliJ IDEA iz .tar.gz
paketa, prilikom prvog pokretanja IDE će vam ponuditi da kreira
desktop entry za brže pokretanje sa GUI menija.
U slučaju da IDE ne ponudi automatski:
sudo tee /usr/local/bin/idea << 'EOF'
#!/usr/bin/env bash
/opt/idea-community/bin/idea.sh "$@"
EOF
sudo chmod +x /usr/local/bin/idea
idea
ili ga pronađite u aplikacijama vašeg desktop okruženja.Da bi vaš Java projekat u IntelliJ IDEA radio bez grešaka, neophodno je da pravilno dodate i konfigurišete Java Development Kit (JDK). U nastavku sledi detaljan i korak–po–korak vodič koji će vas provesti kroz ceo proces, od otvaranja podešavanja pa sve do izbora novog Project SDK.
File → Settings
IntelliJ IDEA → Preferences
Project Structure
(ili pritisnite Ctrl+Alt+Shift+S
).
+
pored liste SDK-ova i odaberite JDK
.
bin
i lib
.
Na primer:
C:\Program Files\Java\jdk-11.0.12
(Windows)/usr/lib/jvm/java-11-openjdk
(Linux)Važno: Budite sigurni da birate korenski folder JDK-a, a ne pod-direktorijume.
OK
.
Project Structure → Project
i u okviru Project SDK izaberite upravo dodat JDK (npr. Java 11).
Nakon ovih koraka, IntelliJ će koristiti izabrani JDK za kompajliranje i pokretanje vaših Java aplikacija. Sada ste spremni da dalje radite na svojim simulacijama ili drugim projektima u Java okruženju.
U sledećem odeljku vodićemo vas kroz proces podešavanja potpuno novog Java projekta u IntelliJ IDEA,
bez oslanjanja na OSP biblioteke. Umesto toga, koristićemo acm.jar
iz Stanford Java Task Force-a,
koja je idealna za jednostavne grafičke i obrazovne aplikacije.
Prvo ćemo postaviti osnovnu strukturu samog projekta unutar IntelliJ IDEA.
src
.
acm.jar
bibliotekeACM biblioteka olakšava crtanje i interaktivne GUI komponente u obrazovne svrhe. Slede koraci za preuzimanje i uključivanje:
acm.jar
sa Stanford sajta:
acm.jar
direktno:
acm.jar
+ → JARs or directories…
.acm.jar
i potvrdite Compile scope.acm.jar
acm.jar
je bibliotekа koju je razvio Tim na Stanfordu kao deo knjige
The Art and Science of Java (Eric Roberts). Namenjena je studentima za jednostavne grafičke aplikacije.
Glavne prednosti:
acm.jar
Sledeći kod prikazuje jednostavan GraphicsProgram
koji crta krug na ekranu:
import acm.program.*;
import acm.graphics.*;
public class KlatnoBezOSP extends GraphicsProgram {
public void run() {
GOval kuglica = new GOval(100, 100, 50, 50);
add(kuglica);
}
public static void main(String[] args) {
new KlatnoBezOSP().start(args);
}
}
Nakon uspešnog pokretanja, pojaviće se prozor sa krugom. Dalje, možete implementirati animaciju matematičkog klatna pomoću numeričke integracije i periodičnog obnavljanja ekrana.
Za više informacija o simulacijama u fizici sa Swing i AWT, posetite:
acm.jar
)
acm.jar
GraphicsProgram
, GLine
, GOval
i dr.
Ove stranice sadrže sve – od preuzimanja i uvođenja u biblioteke, do referentnih JavaDoc stranica i tutorijala za napredne GUI tehnike.
import acm.program.*;
import acm.graphics.*;
import java.awt.*;
public class MatematickoKlatno extends GraphicsProgram {
private static final int DUZINA_KLATNA = 200;
private static final double PERIOD = 2000; // u milisekundama
private static final double AMPLITUDA = 100;
private GLine nit;
private GOval kugla;
public void run() {
setSize(400, 400);
int sredinaX = getWidth() / 2;
int vrhY = 50;
// Kugla klatna
kugla = new GOval(20, 20);
kugla.setFilled(true);
kugla.setColor(Color.RED);
add(kugla);
// Nit klatna
nit = new GLine(0, 0, 0, 0);
add(nit);
while (true) {
long vreme = System.currentTimeMillis() % (long)PERIOD;
double ugao = AMPLITUDA * Math.sin(2 * Math.PI * vreme / PERIOD);
double x = sredinaX + DUZINA_KLATNA * Math.sin(Math.toRadians(ugao));
double y = vrhY + DUZINA_KLATNA * Math.cos(Math.toRadians(ugao));
kugla.setLocation(x - kugla.getWidth()/2, y - kugla.getHeight()/2);
nit.setStartPoint(sredinaX, vrhY);
nit.setEndPoint(x, y);
pause(10);
}
}
/** Pokretač aplikacije kada idemo iz IDE-a ili komandne linije */
public static void main(String[] args) {
new MatematickoKlatno().start(args);
}
}
U nastavku je pregled glavnih delova koda i objašnjenje šta se dešava kada nasleđujete ACM-ovu klasu GraphicsProgram
i kako se u metodi run()
postavlja i pokreće animacija klatna.
GraphicsProgram
Metodom public static void main(String[] args)
kreiramo objekat klase MatematickoKlatno
i pozivamo
start(args)
. To pokreće ACM-ov životni ciklus:
init()
– inicijalizacija pre run()
.run()
– glavni kod animacije.start()
i stop()
– pozivi pri pokretanju i gašenju programa.Na početku klase definišu se konstante kojima kontrolišemo klatno:
DUZINA_KLATNA
– dužina klatna u pikselima.PERIOD
– period oscilacije u milisekundama.AMPLITUDA
– maksimalni ugao ili pomeraj u pikselima.
Zatim se deklarišu grafički objekti:
GLine nit
za nit klatna i GOval kugla
za samu kuglu.
run()
– podešavanje i glavni toksetSize(600, 600)
definiše dimenzije glavnog prozora.GOval
i GLine
, podešavaju boje i dodaju na platno metodom add(...)
.while(true)
petlja stalno izračunava položaj i osvežava prikaz.while(true)
petljelong vreme = System.currentTimeMillis() % (long)PERIOD;
double ugao = AMPLITUDA * Math.sin(2*Math.PI*vreme/PERIOD);
double x = sredinaX + DUZINA_KLATNA*Math.sin(Math.toRadians(ugao));
double y = vrhY + DUZINA_KLATNA*Math.cos(Math.toRadians(ugao));
kugla.setLocation(x - kugla.getWidth()/2, y - kugla.getHeight()/2);
nit.setStartPoint(sredinaX, vrhY);
nit.setEndPoint(x, y);
pause(10);
uvodi kratku pauzu radi glatke animacije.
GraphicsProgram
GraphicsProgram
iz ACM biblioteke automatski kreira GUI prozor i primerak canvas-a,
pokreće init()
i run()
, te pruža metode:
add(GObject obj)
/ remove(GObject obj)
getWidth()
/ getHeight()
pause(int ms)
addMouseListeners()
, addKeyListeners()
setSize(width, height)
, setBackground(Color)
GLine
i GOval
GLine
new GLine(x1,y1,x2,y2)
setStartPoint(x,y)
, setEndPoint(x,y)
GOval
new GOval(width,height)
setFilled(true/false)
, setColor(Color)
setLocation(x,y)
Nasleđivanjem ovih klasa dobijate brz i jednostavan način za crtanje i animaciju u Java aplikacijama.