Zaloguj się, aby obserwować  
Bartuc

Język C / C++ / C# / Java - pytania, problemy...

1979 postów w tym temacie

Dnia 12.08.2012 o 18:03, Erton napisał:

Pierwsze pytanie jest z gatunku tych frustrujących. Mam sobie okienko gry, w którego
metodzie paint maluję sobie tło i karty (bo próbuję napisać Pokera w uproszczonej wersji).
I teraz chcę domalować guzik (on będzie służył do poinformowania Serwera, żeby podesłał
wymienił karty). I teraz ten guzik nie chce się pokazywać. Pokazuje się dopiero po najechaniu
na niego myszką a jeśli rozszerzam okno to "miga" przy każdym rozszerzeniu.

Pierwsza zasada: Robisz jak najmniej i tylko to co wiesz, że należy zrobić. Nadgorliwość jest gorsza od faszyzmu.
Sprawa pierwsza - czy wiesz co robi super.paint()?
Zapewne nie. A robi ona głównie to czego nie chcesz, czyli zamalowuje bieżącym kolorem tła powierzchnię kontrolki. Wiesz czemu to wiem? Ponieważ nie cierpię ustawień domyślnych. Mam zielone tło i jak widzę zielone, którego nie namalowałem, to wiem, że coś robi to za mnie. A jak widzę w skończonych programach kolor biały, mimo iż w systemie mam ustawiony zielony, to już wiem, że program robił dyletant. I wbrew pozorom często dotyczy to poważnych aplikacji.
Tak więc jeżeli chcesz się bawić/uczyć gui, to najpierw swoje własne gui customizujesz tak, żeby było jak najdalsze od wersji default, bo na niej nie poznasz czy białe tło to skutek przypadku czy nie. Chodzi nie tylko o tło - kursory myszy, styl okna itp. Dopracowane aplikacje mają to dopracowane ponieważ ktoś zadał sobie trudu, żeby nie pozostawiać niczego przypadkowi.

Dnia 12.08.2012 o 18:03, Erton napisał:

Czytałem w internecie, że parę osób miało z tym problem, ale jakoś rozwiązania znaleźć nie mogłem.

Bo każdy kto dowie się dlaczego mu migocze zwyczajnie wstydzi się, że mógł się wywalić na takich pierdołach. ;) Ale problem nie jest wstyd z tego powodu, a fakt że po prostu przestają programować przypadkowo i zaczynają czytać dokumentację. Dobrze napisana dokumentacja zawiera co najmniej trzy informacje w każdym zdaniu. Jeżeli widzisz, tylko dwie lub jedną, to widzisz za mało.

Dnia 12.08.2012 o 18:03, Erton napisał:

Button dodaję do ContentPane okienka (wiem, że lepiej na panelach, ale póki co to chyba bez różnicy).

Właśnie dlatego masz problem że go lekceważysz. Jeżeli nie wiesz czy jest różnica, to po prostu czegoś nie doczytałeś. Różnica jest w tym, że każdy panel ma osobną procedurę rysowania, a panele będące sąsiadami mają grafikę całkowicie odseparowaną od siebie. Button w panelu jest dzieckiem u rodzica i jego wyświetlanie zależy od wyświetlania rodzica.

Dnia 12.08.2012 o 18:03, Erton napisał:

Guzik pojawia się dopiero po najechaniu.

Jak myślisz, co się wtedy dzieje? Guzik chce się zaktualizować bo przecież na jego obszarze znalazł się kursor myszy.
Dlaczego nie narysował się wcześniej?
Bo mu to uniemożliwiłeś.
W jaki sposób? Przez niedoczytanie. W AWT jeżeli redefiniujesz procedurę paint, to przejmujesz pełną kontrolę nad rysowaniem całego obszaru komponentu, którego obsługę rysowania przejąłeś. Musisz narysować wszystko co chciałbyś, żeby tam się znalazło. Wyrysowuje więc tylko to co jawnie i poprawnie narysowałeś. I nic innego.
W Swingu za odmalowywanie wszystkich komponentów odpowiada też ta sama procedura, ale w odróżnieniu od AWT ma ona zawsze pewną zawartość. Tą zawartością są 3 rzeczy, które robi swingowy paint:
1. Odmalowanie bieżącego komponentu (paintComponent)
2. Odmalowanie obramowania tego komponentu (paintBorder)
3. Odmalowanie w pętli (i to rekurencyjnie) *wszystkich* elementów gui na jego obszarze czyli to co w dokumentacji nazywane jest "children".
W przypadku punktu 1 większość komponentów Swinga ma własną procedurę. Na przykład JButton odmalowuje sobie wygląd przycisku zgodny z aktualnym Look&Feel, a JPanel odmalowuje sobie całą powierzchnię w bieżącym kolorze tła (zwykle białym).
W przypadku punktu 2 odmalowywana jest ramka odzwierciedlająca informację o fokusie (czarna ramka, przerywana lub nic).
W przypadku punktu 3. Sprawdzana jest zawartość wszystkich obiektów Swinga dodanych za pomocą add() i dla każdego z nich wywoływany jest ich własny paint(), który *też składa się z tych samych trzech kroków*.

Jeżeli chcesz sam zabrać się za rysowanie komponentu Swinga (w tym JPanela), to ok, ale pamiętaj, że jeżeli przyjąłeś reguły Swinga, to wara Ci od paint, chyba, że wywołasz super.paint() bo metoda ta odmaluje to, co powinieneś zrobić. Wszystko co zrobisz po tym wywołaniu znajdzie się "nad" tym co odmaluje super.paint(). Efekt będzie taki, że możesz sobie wyrysować bohomazy na istniejącym widoku komponentów Swinga. Trochę tak jakbyś malował na szybie pod którą widać to co powinno być widać.
Krótko mówiąc jedyne co powinieneś modyfikować, to metodę paintComponent() bo tylko to gwarantuje, że jedyne co skopiesz, to wygląd samego komponentu bez skopania wyglądu bieżącego obramowania czy podobiektów. Nawet gdybyś całą powierzchnię zalał w kolorze czerwonym, to w przypadku buttona dostaniesz czerwony prostokąt prawidłowo obramowany, a w przypadku JPanela czerwony panel z poprawną ramką oraz buttonami i innymi komponentami swinga na czerwonym tle.

Przyczyną Twojego złego malowania jest to, że przechwytując paint, co prawda wywołujesz superPaint dzięki czemu wnętrze Twojego okna się maluje (w tym tło), ale zaraz potem przykrywasz to swoimi autorskimi bohomazami - i to na całej powierzchni komponentu. Twoje bohomazy składają się z dwóch faz:
1. Malowanie na jakimś obrazku w domyślnie tworzonym planie graficznym (niekoniecznie takim w jakim pracuje bieżący ekran). Nie wiem po co tutaj - malowanie na czym innym niż bieżąca grafika na ekranie nie należy do zadań metod rodziny paint(). Jest to dopuszczalne, ale spowalnia wątek GUI, który służy do maksymalnie szybkiej obsługi GUI, a nie Twoich obiektów czy obrazków.
2. Wymalowanie na powierzchni komponentu Twoich bohomazów w postaci obrazka image. Jeżeli plany image i bieżącego ekranu nie są takie same, to przy okazji spowalniasz rysowanie. (żeby plany były takie same używa się createCompatibleImage()). Tym oczywiście powodujesz przykrycie obrazów narysowanych przez super.paint(), a więc i wszystkich dodanych przycisków, etykiet czy innych pod paneli (i tu masz pierwsze "mignięcie").

Dnia 12.08.2012 o 18:03, Erton napisał:

Drugi problem polega na tym, że chciałbym móc przeciągać karty i żeby w trakcie przeciągania
karta "podążała" za myszką aż do momentu jej upuszczenia. Wykorzystuję do tego MouseListener
i MouseMotionListener. I chciałem to zrobić tak, że w metodzie mousePressed aktywuję
jakąś flagę, w mouseReleased ją zdezaktywować, a w mouseMoved, jeśli ta flaga jest aktywowana
to aktualizować współrzędne karty

To jest ok. Tyle, że u Ciebie karta może być ikoną lub dowolnym obrazkiem malowanym na powierzchni komponentu. Jest to jeden z niewielu przypdaków kiedy będzie to poprawne rysowanie po super.paint() lub lepiej super.paintComponent(). Musisz tylko pamięta, że każda aktualizacja obrazu spowoduje kolejne wywołanie serii paintComponent, czyli w efekcie likwidację narysowanego obrazka karty. W przypadku wleczenia go jest to poprawne bo od razu załatwia Ci problem likwidacji obrazka w "starym miejscu".

Migotanie jest zwykle efektem tego, że w paint lub paintComponent albo jawnie wywołujesz repaint, albo robisz coś, że któreś z właśnie odrysowywanych komponentów dostaje status invalidate, co spowoduje repaint, co spowoduje update, co spowoduje kolejne serie paint/paintComponent. Gdyby Swing nie miał mechanizmu likwidacji nadmiarowych komunikatów Swinga (gdyby każde repaint musiało się wykonać), to otrzymałbyś ciąg rekurencyjnych wywołań, przepełnienie stosu i klasyczne jebudu - zawieszenie lub wysypanie javy/systemu/komputera (niepotrzebne skreślić).

Dnia 12.08.2012 o 18:03, Erton napisał:

I teraz chciałem to sobie sprawdzić, zrobiłem sobie zmienną boolean, w mousePressed
ustawiałem ją na true, w mouseReleased na false, a w mouseMoved robiłem
if (tmp) System.out.println(arg0.getX()). No i to nie działa.

Działa. Mi to zawsze działa.
Po pierwsze czym jest arg0?
Weź pod uwagę tylko, że komunikaty lecą do najbardziej zagłębionego obiektu nad którym znajduje się mysz. Jeżeli masz pusty panel, to nie ma żadnego problemu. Jeżeli masz pusty panel z ręcznie malowanymi kartami, to też nie ma problemu. Ale jeżeli masz podobiekty, to komunikaty myszy nad nimi lecą do nich, a nie do panela. Chyba, że je przekierują lub nie obsługują (wtedy lecą wyżej). Dane położenia myszy są zawarte w samym komunikacie i to stamtąd należy je wyciągać.
Teraz już wiesz po co jest osobny równoległy panel z kontrolkami gry? Właśnie po to żeby nie przeszkadzały. Jeżeli robisz grę, to na jej powierzchni nie ma żadnego dodatkowego gui. Chyba, że umiesz to skompensować i wiesz co robisz (np. paintImmediately).

Dnia 12.08.2012 o 18:03, Erton napisał:

Może ja powinienem wtedy jakiś wątek odpalać i w nim operować tym mouseMoved?

Nie.

Krótko podsumowując:
Paint używasz tylko wtedy kiedy komponent nie ma ramki, nie ma ona sensu lub znaczenia i nie ma żadnych podobiektów - jest to prawdziwe właściwie wyłącznie dla pustego JPanela, gdzie paintBorder() i paintChildren() to operacje puste (przez użycie paint oszczędzasz więc jakieś 2 nanosekundy - nie warto). W każdym innym wypadku *musisz* przechwytywać paintComponent, a paint nawet nie tykać.

ps. Jeżeli używasz jakiegoś IDE (eclipse, netbeans itp.), to indeks metod w Javie 7 (javadocs api) nie działa. Trzeba sobie dodatkowo załadować javadoca od JDK 6 lub starszego, żeby móc wyciągać poszczególne metody po nazwie)
ps2. http://java.sun.com/products/jfc/tsc/articles/painting/index.html

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../
Teraz trafiłem na ten temat. Z tego co przeczytałem wynika, że iść na informatykę jest nieopłacalne. Ja osobiście uważam, że jeśli ma się samozaparcie i będzie się już podczas studiów/praktyk tworzyło własne projekty, to da się rade do czegoś dojść. Pisanie o tym, że polscy informatycy są do tylu, jest obraźliwe i blednę(moim zdaniem). Mamy przecież pierwsze miejsca(jak nie to chociaż w pierwszej 5) na rożnego rodzaju konkursach. Nie sledze tego jakoś bardzo, ale nie można tez powiedzieć ze jesteśmy zacofańcami :D Zgodzę się natomiast co do tego, ze niektórzy idą na informatykę by zarobić łatwa kasę. Ja np. idę by pracować kiedyś tam nad sztuczna inteligencja, jest to moje marzenie i będę do tego dążyć. Miałem małą przerwę, ale juz wracam do formy. :D

Teraz pytania dotyczące programowania. Przeczytałem o tej książce TiJ i chciałem ja znaleźć by sobie kupic, ale w Polsce mamy tylko 4 wydanie. Czy ja źle szukam? Nie czekać na nowe wydanie tylko kupić w ''engliszu''? Szukając jej natrafiłem na to: ''Od matematyki do programowania''. Miał ktoś z nią styczność? Dobrze sobie ja przeczytać?
Wiem, że na informatyce będę się uczyć C, wiem że on jest starszy niż C++. W szkole uczyłem się CPP z Symfonia C++. Teraz się zastanawiam, czy zainwestować i kupić jakaś książkę do C, czy olać i skupić się na CPP? Może błędne rozumowanie. Za odpowiedzi będę bardzo wdzięczny.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.08.2012 o 10:02, Dregorio napisał:

/.../
Teraz trafiłem na ten temat. Z tego co przeczytałem wynika, że iść na informatykę jest
nieopłacalne. Ja osobiście uważam, że jeśli ma się samozaparcie i będzie się już podczas
studiów/praktyk tworzyło własne projekty, to da się rade do czegoś dojść. Pisanie o tym,
że polscy informatycy są do tylu, jest obraźliwe i blednę(moim zdaniem). Mamy przecież
pierwsze miejsca(jak nie to chociaż w pierwszej 5) na rożnego rodzaju konkursach. Nie
sledze tego jakoś bardzo, ale nie można tez powiedzieć ze jesteśmy zacofańcami :D Zgodzę
się natomiast co do tego, ze niektórzy idą na informatykę by zarobić łatwa kasę. Ja np.
idę by pracować kiedyś tam nad sztuczna inteligencja, jest to moje marzenie i będę do
tego dążyć. Miałem małą przerwę, ale juz wracam do formy. :D


To nie jest do końca nieopłacalne - zawsze sie dowiesz czegoś ciekawego, poznasz jakąś nową technologię (jednak to trochę zależy na jakiego prowadzącego się trafia :P ) etc.
Z drugiej strony żeby być programistą nie trzeba kończyć informatyki. Są osoby które są elektornikami i programują mikroprocecosry, są też takie, które mają doktorat z fizyki i też programują ;)

Dnia 13.08.2012 o 10:02, Dregorio napisał:

Teraz pytania dotyczące programowania....



Na twoim miejscu zaczął bym od C:
- Kernighan i Ritchie "Język ANSI C" (Panowie są dość "konkretni", więc może wydawać się trudniejsza)
- S.Prata "Język C. Szkoła programowania" (wszystko całkiem spoko opisane, z przykładami, imo łatwiejsza od K&R) :)


Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.08.2012 o 10:02, Dregorio napisał:

Teraz trafiłem na ten temat. Z tego co przeczytałem wynika, że iść na informatykę jest nieopłacalne.

Nie wiem co rozumiesz przez "nieopłacalne".
Jest korzystne nie tylko z powodu posiadania konkretnego zawodu, ale i z powodów finansowych. Co więcej, największe fortuny osobiste jakie istnieją wynikają z połączenia umiejętności inżynierskich, finansowych lub interpersonalnych z umiejętnością programowania. I są na to przykłady: Jobs, Gates, Zuckenberg. Żaden z nich bez umiejętności programowania nie doszedłby do niczego. Programowanie jest niezbędne również w fizyce, astronomii, a nawet współczesnej geologii, biologii i ...archeologii.
Tyle, że pojęcie informatyki jest bardzo szerokie. Jeżeli ktoś przez to rozumie umiejętność instalowania systemu, czy podłączania kabli, to faktycznie jedyną pracą jaka jest możliwa, to garowanie jako sprzedawca za ladą w bezludnym sklepie.

Dnia 13.08.2012 o 10:02, Dregorio napisał:

Pisanie o tym, że polscy informatycy są do tylu, jest obraźliwe i blednę(moim zdaniem).
Mamy przecież pierwsze miejsca(jak nie to chociaż w pierwszej 5) na rożnego rodzaju konkursach.

Programistycznych. W Polsce jest sporo niezłych programistów, ale większość z nich pracuje jako najemnicy w zagranicznych korporacjach. Większość z nich nie pracuje dla siebie, ale dla kogoś. Nawet jeżeli wygrywali wszelkie możliwe konkursy, to przydają im się one tylko do CV. Nie do założenia własnej firmy z nowym potencjałem. A tylko to pozwala zrobić karierę. Inna sprawa, że w Polsce działalność taka duszona jest już w zarodku stawiając nasz kraj w roli taniej siły roboczej również w tej dziedzinie. Wielu najlepszych z nich niekoniecznie studiowała Informatykę. No chyba, że na 2-3 najlepszych uczelniach mających wydziały techniczne Warszawa/Wrocław/Kraków - to wtedy co innego.

Dnia 13.08.2012 o 10:02, Dregorio napisał:

Nie sledze tego jakoś bardzo, ale nie można tez powiedzieć ze jesteśmy zacofańcami :D

Jeżeli chodzi o uczelnie to jesteśmy. Większość sukcesów ludzi po polskich uczelniach bierze się nie z zakresu programów studiów, ale dalekiego wykroczenia poza nie. Na uczelniach z czołówki światowej jakieś 4/5 studentów reprezentuje poziom, który u nas reprezentuje 1/10 studentów. Wynika to za zapóźnienia i wtórności naszych programów studiów oraz brutalnie mówiąc odpadów kadrowych na polskich uczelniach w tej dziedzinie. Przecież nikt normalny umiejąc co nieco nie pójdzie pracować na polską uczelnię bo nie daje to perspektyw, ani kariery naukowej, ani pieniędzy. Dlatego u nas wykładowcami są generalnie nieudacznicy. Jest oczywiście jakiś procent ludzi wybitnych, ale są to wyjątki, a nie reguła.

Dnia 13.08.2012 o 10:02, Dregorio napisał:

Zgodzę się natomiast co do tego, ze niektórzy idą na informatykę by zarobić łatwa kasę.

Nawet jeżeli tacy kończą uczelnie, to potem są w najlepszym razie koderami bez przyszłości - nie są w stanie sami wymyślić nawet najmniejszego naprawdę przydatnego programu. Oczekują tylko na cudze pomysły w postaci zleceń.

Dnia 13.08.2012 o 10:02, Dregorio napisał:

Ja np. idę by pracować kiedyś tam nad sztuczna inteligencja, jest to moje marzenie i będę do
tego dążyć. Miałem małą przerwę, ale juz wracam do formy. :D

To powodzenia.

Dnia 13.08.2012 o 10:02, Dregorio napisał:

Teraz pytania dotyczące programowania. Przeczytałem o tej książce TiJ i chciałem ja znaleźć
by sobie kupic, ale w Polsce mamy tylko 4 wydanie.

To ostatnie polskie wydanie. Nie jestem pewien, ale jest to również ostatnie wydanie w ogóle ponieważ Bruce Eckel chyba jeszcze nie wydał edycji nr 5. A jeżeli już, to może elektronicznie w postaci poszczególnych artykułów.

Dnia 13.08.2012 o 10:02, Dregorio napisał:

Czy ja źle szukam? Nie czekać na nowe wydanie tylko kupić w ''engliszu''?

Jeżeli lepiej Ci się będzie czytać po angielsku, to bierz angielską. Polska wersja ma tylko 2-3 drobne błędy tłumaczenia, więc dla osób nie obeznanych z technicznym angielskim jest cenna.
Poza tym mimo iż opisuje wersję 5 z elementami 6, to i tak jest jedną z najbardziej aktualnych na rynku, a przy tym zawiera przynajmniej półroczny kurs Javy, który jest absolutną podstawą, żeby można powiedzieć, że zna się Javę SE (tylko).

Dnia 13.08.2012 o 10:02, Dregorio napisał:

Szukając jej natrafiłem na to: ''Od matematyki do
programowania''. Miał ktoś z nią styczność? Dobrze sobie ja przeczytać?

Tej nie znam. Jeszcze.

Dnia 13.08.2012 o 10:02, Dregorio napisał:

Wiem, że na informatyce będę się uczyć C, wiem że on jest starszy niż C++. W szkole uczyłem
się CPP z Symfonia C++. Teraz się zastanawiam, czy zainwestować i kupić jakaś książkę
do C, czy olać i skupić się na CPP?

C, jego składnia i fakt, że jest to język funkcyjny i mający bardzo dużo wspólnego z programowaniem maszynowym jest do dzisiaj bardzo cenny. Na C m.in. opiera się Java (nie na C++). Znajomość C jest bardzo (naprawdę bardzo) przydatna czytając TiJ.
C++ jest rozszerzeniem C, które jest moim zdaniem bardzo podłym rozszerzeniem obiektowym. Praktycznie nie zlikwidował żadnych problemów istniejących w C, a dołożył sporo nowych, specyficznych tylko dla tego języka. Jego znajomość nie jest żadnym bonusem.
Podobnie jak znajomość C niezwykle ułatwia nauczenie się Pascala przez poznanie jedynie jego ograniczeń w stosunku do C, tak znajomość Javy niezwykle ułatwia nauczenie się C++ - również przez poznanie jedynie ograniczeń C++ w stosunku do Javy. Tak samo znajomość kiedyś Basica bardzo ułatwiała nauczenie się Assemblera.
Jeżeli więc ktoś zaczyna się uczyć programowania, to moim zdaniem najlepszą kolejnością jest Basic/Logo -> jakiś Assembler -> C -> Pascal* -> Java/C# -> C++/Delphi -> Python/Scala/Ruby/Erlang/Ada/Prolog.
Oczywiście równolegle trzeba poznawać języki skryptowe i obsługi baz takie jak Perl, Javascript, VBScript, PHP, SQL, AWK.
Im więcej języków się pozna i środowisk uruchamiania, tym jest łatwiej i ma się większą perspektywę tego co można zrobić.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../

Dnia 13.08.2012 o 13:11, Olamagato napisał:

> Ja np. idę by pracować kiedyś tam nad sztuczna inteligencja, jest to moje marzenie
i będę do
> tego dążyć. Miałem małą przerwę, ale juz wracam do formy. :D
To powodzenia.

Tak jakbym sarkazm wyczuwał.

/.../

Dnia 13.08.2012 o 13:11, Olamagato napisał:

Jeżeli więc ktoś zaczyna się uczyć programowania, to moim zdaniem najlepszą kolejnością
jest Basic/Logo -> jakiś Assembler -> C -> Pascal* -> Java/C# -> C++/Delphi
-> Python/Scala/Ruby/Erlang/Ada/Prolog.
Oczywiście równolegle trzeba poznawać języki skryptowe i obsługi baz takie jak Perl,
Javascript, VBScript, PHP, SQL, AWK.
Im więcej języków się pozna i środowisk uruchamiania, tym jest łatwiej i ma się większą
perspektywę tego co można zrobić.

Więc jaką literaturę mi na początek polecasz?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.08.2012 o 16:16, Dregorio napisał:

Tak jakbym sarkazm wyczuwał.

Naprawdę zero sarkazmu.

Dnia 13.08.2012 o 16:16, Dregorio napisał:

Więc jaką literaturę mi na początek polecasz?

Podręczniki programowania i wszelkie "algorytmy i struktury danych" (jest już kilka takich książek, chociaż jak na razie widziałem w Pascalu i C++, ciekawe kiedy pojawi się coś w Javie). Tu też działa zasada im więcej, tym lepiej. Nawet w słabych książkach znajdzie się czasem unikalne perełkowe rozwiązania.
I jeden podręcznik do Swinga/JavyFX 2, żeby wyrobić sobie pojęcie o współczesnych GUI napędzanych zdarzeniami.
To jeżeli chodzi o początki. Jeżeli będziesz się wgryzał w Javę, to do przewalenia będą Java EE, Spring, JSP, a ze środowisk prawdopodobnie Android. Ale to już dalekie wyjazdy w przyszłość.

Z technologii, które można olać można sobie darować ActionScript i flasha, które są już raczej w odwrocie. Podobnie z Algolem, Cobolem, Fortranem, Modulą i (ewentualnie) Lispem. Ich dni już przeminęły.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 14.08.2012 o 03:23, Olamagato napisał:

Podręczniki programowania i wszelkie "algorytmy i struktury danych" (jest już kilka takich
książek, chociaż jak na razie widziałem w Pascalu i C++, ciekawe kiedy pojawi się coś
w Javie).


http://helion.pl/ksiazki/algorytmy-wydanie-iv-robert-sedgewick-kevin-wayne,algor4.htm

Pierwszy rozdział (~200 stron) to właściwie taki krótki kurs Javy, po to by każdy mógł zrozumieć implementacje algorytmów z dalszej części książki.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ok, przyznaję, po ponownym (bo już to wszystko ze 2 razy czytałem) przejrzeniu artykułów na temat Swinga, że moje pytania świadczyły o braku podstawowej wiedzy na temat mechanizmów działania grafiki w Javie. Wystarczyło wrzucić do wszystko do panelu, panel dodać do ContentPane mojego okna, w panelu przeciążyć paintComponent i dodać do niego przycisk. I wszystko pięknie chodzi. Będę jeszcze czytał na ten temat, bo braki w wiedzy są jak widzę spore.

Co do drugiego problemu - kombinuję i nadal to nie chce wyjść. Zrobiłem to (dla ćwiczeń, to oczywiście nie tak ma działać) tak:

public void mousePressed(MouseEvent arg0) {
tmp2 = true;
}
public void mouseReleased(MouseEvent arg0) {
tmp2 = false;
}

public void mouseMoved(MouseEvent arg0) {
if(tmp2) System.out.println("HELLO");
System.out.println("RUSZAM SIE");
}

Oczywiście dodałem oba Listenery (Mouse Listener i MouseMotionListener). I teraz tak: dopóki macham sobie myszką, pojawia się non-stop w konsoli "RUSZAM SIĘ". W momencie kliknięcia (i trzymania) nic się nie dzieje, jak (trzymając cały czas wciśnięty lewy przycisk myszki) jeżdżę sobie po ekranie to nie wypisuje się ani "HELLO" ani "RUSZAM SIĘ" (i to mnie głównie dziwi, że teraz nawet "RUSZAM SIĘ" nie wypisuje). I po puszczeniu myszki znowu zaczyna się przy każdym ruchu wypisywać "RUSZAM SIĘ". Coś myślałem (ale mi takie myślenie jak zauważyłem to źle wychodzi :P), że to jest jakiś problem z przechwytywaniem tego MouseEvent, że dopóki jest to obsługiwane przez mousePressed, to nie jest przez mouseMoved. Ale nie wiem, to tylko takie moje fanaberie. I w sumie nurtuje mnie to. Nie jest mi jakoś bardzo potrzebne, ale chyba może się przydać kiedyś.

No nic, lepiej teraz mieć takie "głupie" problemy (jak z tym guzikiem) niż potem, jak ktoś ważny się będzie mnie o to pytał. Dziękuję bardzo za wyczerpującą pomoc.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../
Dziękuje za pomoc, jestem niezmiernie wdzięczny.
Korzystając z okazji. Zakupiłem sobie: ''Język C. Szkoła programowania. Wydanie V'', ''TiJ'', ''Od matematyki do programowania. Wszystko, co każdy programista wiedzieć powinien'', ''Java. Podstawy. Wydanie VIII''. Za wszystko dałem 250zł(na promocjach i po wybłaganiu zniżki ^^), mam chociaż nadzieje ze ta inwestycja się wróci^^. Mam tez od kolegi ''Symfonie C++''. Teraz tylko odstawić książki SF i fantasy i wrócić do nauki...

Do BASIC`a i Asemblera wrócę się we wakacje, bo w czasie roku pewnie nie będę mieć czasu, a na studiach z tego co wiem jest C i C++, choć się nie znam.

Jeszcze raz dziękuje za pomoc :D

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 14.08.2012 o 19:37, Dregorio napisał:

Do BASIC`a i Asemblera wrócę się we wakacje, bo w czasie roku pewnie nie będę mieć czasu,
a na studiach z tego co wiem jest C i C++, choć się nie znam.

Zależy od studiów. Z tego co mi wiadomo to ostatnio często pojawia się też C#, Java też czasem jest. Z kolei w przypadku niektórych zajęć (np. struktury i algorytmy) masz absolutną dowolność co do wybranego języka, byleby działało.


Za to pytanie ode mnie - są jakieś sensowne podręczniki dla biblioteki Boost w C++? Czy też interesować się tylko oficjalną dokumentacją?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 14.08.2012 o 19:43, ziptofaf napisał:

Za to pytanie ode mnie - są jakieś sensowne podręczniki dla biblioteki Boost w C++? Czy
też interesować się tylko oficjalną dokumentacją?

Obawiam się, że jeżeli nic nie udało Ci się wygooglować, to raczej nie ma. W C++ już od kilku lat nie siedzę (tylko okazjonalnie kiedy muszę na szybko jakieś narzędzie sklecić, a to wtedy raczej C bo małe), więc sam niewiele mogę pomóc.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 14.08.2012 o 19:37, Dregorio napisał:

Teraz tylko odstawić książki SF i fantasy i wrócić do nauki...

Umiejętności programistyczne nie wzbogacone wiedzą ogólną powodują, że programista staje się dosłownie automatem tworzącym programy technicznie świetne, ale oderwane od życia i rzeczywistości. Wtedy o takich mówi się "buc", "bałwan", "nadęty palant" itp. Raczej słaba perspektywa - lecz wielu znanych ludzi jej ulega.
A nawet literatura SF jest bliższa rzeczywistości niż nic, więc warto czytać wszystko. W tej dziedzinie wszystko co można naprawdę wymyślić nie zostało jeszcze wymyślone. Taką optymistyczna myśl rzucił mi kiedyś znajomy.

Dnia 14.08.2012 o 19:37, Dregorio napisał:

Do BASIC`a i Asemblera wrócę się we wakacje, bo w czasie roku pewnie nie będę mieć czasu,
a na studiach z tego co wiem jest C i C++, choć się nie znam.

Basica nie ma sensu się uczyć jeżeli już zna się C, Pascala czy cokolwiek lepszego. Jest on niezły bo daje zupełnie początkującemu pewien pogląd jak naprawdę działa procesor. Natomiast assembler jest tylko o tyle wartościowy, że jest to jedyny "język", który przekłada się w pełni w obie strony ze źródła na kod maszynowy i odwrotnie. Należy więc go znać głównie po to, żeby rozumieć listing debuggera i ewentualnie ograniczenia kodu produkowanego przez kompilatory (np. generalny brak używania rejestru znaczników, nie przejmowanie się przepełnieniami czy podobnymi błędami, które w języku wysokiego poziomu są kompensowane dodatkowym czasem marnowanym na diagnostykę robioną w kodzie runtime i to post-factum.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dobra, rozwiązałem ten problem z ruszaniem myszką. Przecież do tego służy metoda mouseDragged..... Ehhh, ile się człowiek nacierpi. No nic, ważne, że w końcu się udało - chociaż jak ja w przyszłości tyle czasu nad takimi pierdołami będę siedział to cienko widzę swą karierę :/

Tym niemniej, obserwując jak ładnie karta chodzi mi po ekranie razem z myszką, nachodzi mnie jednak uczucie:
http://24.media.tumblr.com/tumblr_m0wj49jHVF1qkmsqmo1_500.gif

:)

Jeszcze raz dziękuję bardzo za pomoc.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 15.08.2012 o 11:35, Erton napisał:

Dobra, rozwiązałem ten problem z ruszaniem myszką. Przecież do tego służy metoda mouseDragged.....
Ehhh, ile się człowiek nacierpi. No nic, ważne, że w końcu się udało - chociaż jak ja
w przyszłości tyle czasu nad takimi pierdołami będę siedział to cienko widzę swą karierę

Zawsze nad podstawami trzeba narobić sporo dupogodzin. Szybko robi się tylko to co już kiedyś się robiło, dlatego jest istotne, żeby ruszyć wiele różnych tematów.
Co do mouseDragged, to jest to event złożony, który ma tylko ułatwić życie przy wleczeniu między różnymi komponentami/aplikacjami. W ramach jednego panela/okna eventy mousePressed, mouseMove i mouseReleased są całkowicie wystarczające. No, ale skoro już sobie poradziłeś, to mogę tylko poradzić, żebyś przetestował sobie różne zachowania bo to, że Ci działa nie znaczy, że już wiesz dlaczego Ci działa. :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Witam, teraz ja mam problem z java :)
Od razu przejde do konkretów: chcę aby w liscie użytkowników, obok imienia, pojawiała sie ikonka/miniaturka zdjęcia. No i tu jest problem, jak to wyświetlić..z tego co wyczytałem to powienienem użyć DefaultListCellRenderer, niestety nie bardzo wiem jak sie do tego zabrac :(

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 18.08.2012 o 09:08, eNcore napisał:

Witam, teraz ja mam problem z java :)
Od razu przejde do konkretów: chcę aby w liscie użytkowników, obok imienia, pojawiała
sie ikonka/miniaturka zdjęcia. No i tu jest problem, jak to wyświetlić..z tego co wyczytałem
to powienienem użyć DefaultListCellRenderer, niestety nie bardzo wiem jak sie
do tego zabrac :(


Z tego co pamiętam (choć mogę się mylić bo dawno w Javie się w to nie bawiłem) to trzeba użyć własnego modelu dla listy.
Przykładowo pierwszy wynik z googla, na samym dole masz listę z obrazkami:

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

O hai!
Jestem w trakcie ogarniania DirectX i stoję na etapie inputu. Jako, że DirecInput to zuo wcielone i sam M$ zaleca go nie stosować, robię to przez WinAPI.
Ogólnie wszystko działa tylko nie mogę zablokować kursora w miejscu...
Próbowałem robić SetCursorPos w WM_MOUSEMOVE ale to jest "za wolne" i jak szybko machnę myszką to wyskakuje z okienka, szczególnie jeśli vsync jest włączony. Da radę jakoś zablokować kursor do jednego okienka, jak w trybie EXCLUSIVE w directinput, wyłącza kursor całkowicie, albo chociaż blokuje go wewnątrz okienka (brzeg okna działałby jak brzeg ekranu)?

Jak grywam w coś (np fpsy) to nie miałem jeszcze czegoś takiego, że myszka mi ucieka z okna gry jak za szybko machnę ;P Z racji że mam 2 monitory to ten problem jest nawet na fullscreenie.

edit: c++ oczywiście

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!


Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.


Zaloguj się
Zaloguj się, aby obserwować