Wizualizacja algorytmów ? technologia

0

Muszę napisać aplikację wizualizującą algorytm, nie mam pojęcia co wybrać?
Pomocy!!!

Znam Jave ale inne języki też wchodzą w grę?

Myślałem o Swingu ale moim zdaniem mało nadaje się do takich rzeczy, jest brzydki i pisanie animacji w tym, jest pracochłonne i mało efektywne.

  1. Co sądzicie o JavaFX, fajnie to wygląda i też idzie się tego nauczyć? W jaką stronę pójdzie rozwój tego, bo słyszałem, JavaFX script ma przejść w zapomnienie?
    Czy warto tym się zajmować ?

  2. Może C#, Microsoft daję darmowe narzędzie XNA do pisania 'gier'(pisanie z DirectX), jak to wygląda? Próbowałem w tym coś napisać ale raczej ciężko mi szło?

  3. Może jakaś technologia webowa, ale jaka by coś takiego obsłużyła i jaki poziom trudności?

Druga sprawa, to co najlepiej może się przydać w przyszłości, chciałbym zajmować się tworzeniem technologi webowych (J2EE) ale nie wiem czy coś z tego będzie przydatne?

pozdrawiam, dzięki za pomoc

0
niezalogowany napisał(a)

Myślałem o Swingu ale moim zdaniem mało nadaje się do takich rzeczy, jest brzydki i pisanie animacji w tym, jest pracochłonne i mało efektywne.

Nie wiesz co mówisz, albowiem nigdy nie zajrzałeś do dokumentacji Swinga. LaF (Look And Feel) - mówi ci to coś? Styl Nimbus i masz ładny styl na każdy system, albo getSystemLaF i jest pobierany systemowy.

Animację się robi tak jak wszędzie: timer i modyfikacje zmiennych. A sama Java oferuje bibliotekę Graphics2D w której można rysować ładną grafikę

I co rozumiesz poprzez wizualizację algorytmów?

0

Możesz mi powiedzieć jak ustawić ten styl ?

No mam problem z wydajnością przy dobrym kompie raczej. Mianowicie na panelu mam 10 kulek, które się poruszają według jakiegoś algorytmu, używam buforowania(chyba, że źle coś robię) no i nie jest to płynna animacja, nie wiem czemu.

Z tego co wiem, to Swing można budować tylko na jednym wątku, co byśmy nie uruchomili to pracuje na jednym wątku, czy się mylę ?
Do układów paneli i button'ów używam GUI buildera(NetBeans), animacje oczywiścię rysuję w 'kodzie', może to jest problem.

A JavaFX, bardzo ładnie się prezentuję ale gdzie niegdzie czytam, że może zniknąć za nie długo, albo będzie w innej postaci, zawarta w JRE i będzie API do tego ?

A może, szło by to zrobić na jakiejś nowej technologii webowej (np. HTML5 nie poradził by sobie)?

0

Acha, nie używam Timerów, tylko wątków z opóźnieniami, może to generuje problem z płynnym chodzeniem animacji?

0

Opóźniacze się sprawdzają przy rozdzielczości sekund, ale nie milisekund.

Ja używam takiego kodu:

try {
                boolean find=false;
                for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                    if (LaF.equals(info.getName())) {
                        UIManager.setLookAndFeel(info.getClassName());
                        find=true;
                        break;
                    }
                }
                if(!find)
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            }
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(global.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(global.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(global.class.getName()).log(Level.SEVERE, null, ex);
        } catch (UnsupportedLookAndFeelException ex) {
            Logger.getLogger(global.class.getName()).log(Level.SEVERE, null, ex);
        }

W Stringu LaF trzymam nazwę stylu. Podstawowe style: Numbis, Metal, CDE. Żeby uzyskać systemowy niezależnie od platformy:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

Trzeba wywołać PRZED utworzeniem jakiegokolwiek komponentu. NetBeans uzupełni ci wyjątki.

0

Jeszcze mam pytanie odnośnie animacji.

W jakiej metodzie najlepiej rysować komponety ?
W metodzie paint, repaint, update ? Czy coś innego, zupełnie innego?
Jaki ustawić czas na Timerze, aby animacja aplikacja ładnie wyglądała.

0

Komponenty najlepiej rysować w metodzie paintComponent(Graphics g), a wymuszać przerysowywanie metodą repaint()
Timera ustaw na 30 fps, czyli 33ms.

No i oczywiście włącz podwójne buforowanie. No i nie zaszkodzi włączyć akceleracji sprzętowej, czyli rysować na VolatileImage. Podzielę się kodem z JavaBlock, który właśnie dodałem:

                VolatileImage vImg;
                GraphicsConfiguration gc;
                int valCode;
                @Override
                public void paintComponent(Graphics g) {
                    createBackBuffer();
                    do {
                        gc = this.getGraphicsConfiguration();
                        valCode = vImg.validate(gc);
                        if (valCode == VolatileImage.IMAGE_INCOMPATIBLE) {
                            createBackBuffer();
                        }
                        paintFlowAccel((Graphics2D) vImg.getGraphics()); //wywołuje metodę rysującą, przekazując Graphics2D akcelerowanego obrazka
                        g.drawImage(vImg, 0, 0, this);
                    } while (vImg.contentsLost());
                }
                void createBackBuffer() {
                    gc = getGraphicsConfiguration();
                    vImg = gc.createCompatibleVolatileImage(getWidth(),
                            getHeight());
                }

Przy krótkim teście dało niewielką poprawę, ale w moim programie nie ma animacji, tylko przerysowywania przy np. ruchu myszki.

0

weź sobie w najnowszym power point wyklikaj :P

0

Jak w Javie zrobić okno (Frame'a) np. z 2-3 panelami, które można by myszką zwiększać zmiejszać na własne potrzeby ?

Czy takie ustawienia idzie np. zapamiętywać w aplikacji, aby następne uruchomienie wyglądało tak jak przy zamknięciu aplikacji ?(używa się propertisów czy coś innego)

0

JSplitPane i do pliku zapisujesz DividerLocation.

0

W jaki sposób połączyć w tym przykładzie animację z dodaniem ruchu przez myszkę?
Czyli jakaś kulka sobie leci w bok, naglę ją przeciągam myszką w górę ?
Co wtedy, zatrzymuję tamtą animację czy jak ??

Używam tego JSplitPane i fajne to, bo tego szukałem ale po paru akcjach bardzo brzydko się zachowuje:
1 - mam 2 splitPanele, ekran podzielony na 3 Panele, na dole jeden, na górze dwa
2 - na górze jeden panel jest wsadzony dodatkowo w JScrollPane, a panel ten jest powiększany w zależności od potrzeb
3 - i wtedy wszystko się psuje, zmiana ogólnego okna w ogóle 'nie wygląda' itd.
Co z tym począć ???

A jeszcze pytanie odnośnie JSplitPane, dlaczego nie idzie zmieniać rozmiarów dwóch okien zawartych w jednym JSplitPane w całej okazałości, tylko np. od 20-30 %

0

Wszystko zależy od tego, jak to zaprogramujesz. Jak zrobisz osobny wątek, to nic ci animacji nie będzie blokowało, chyba że sam zablokujesz.

jak na razie to widzę że powinieneś zająć się prostszymi sprawami niż animacja.

A co do tych problemów z JSplitPane to mógłbyś to jakoś zobrazować? Bo nic nie zrozumiałem

0

Hm, twierdzisz, że powinienem zacząć od prostszych rzeczy ale jakich ?
Jestem programistą od 2 lat, Javą zajmuję się 4 miesiące.

Niestety, czy lepiej czy gorzej mi to idzie muszę zrobić animację, może polecasz jakieś przykłady sprawdzone, książki czy przydatne strony.

Odnośnie JSplitPane postaram się jakoś to zobrazować później, bo nie wiem jak to wytłumaczyć lepiej

0

Ja programowaniem bawię się od 3 lat, a Javą od 6 miesięcy.

Na początek dowiedz się jak działa interfejs MouseListener i jego metody. Animacje robisz za pomocą timerów, które wywołują metody do obliczania logiki i rysowania. Cały mechanizm animacji samemu musisz zaprogramować. Jak chcesz symulację fizyczną, to albo piszesz samemu silnik fizyczny, albo używasz gotowy (np. JBox2D). Oczywiście musisz nauczyć się te silniki obsługiwać. Teoretycznie cała filozofia. Teraz tylko to wszystko zaprogramować.

Jak nie będziesz nic próbował samemu, to się niczego nie nauczysz.

Co do książek to nie znam nic:/ Tutoriale w necie możesz poszukać. Z tego uczyłem się obsługi Graphics2D:
http://java.sun.com/products/java-media/2D/samples/suite/index.html

0
niezalogowany napisał(a)

Jestem programistą od 2 lat, Javą zajmuję się 4 miesiące.

Razi91 napisał(a)

Ja programowaniem bawię się od 3 lat, a Javą od 6 miesięcy.

Brzmi to trochę jak przedstawianie się na zlocie AA. ;P

1 użytkowników online, w tym zalogowanych: 0, gości: 1