java, a nie js dlaczego nie działa i o zdarzenie??

0

Mogę ten kod zkompilować ale nie wyswietla mi tych linijek :?
mam taki kod:

import java.awt.;
import javax.swing.
;
public class read extends java.applet.Applet {
int y;
String[] headlines;
public void init() {
int y = 76;
String[] headlines = {
"jakis tam sobie tekst",
"teksty do przewija...",
"drasdfad ;fadfasdlkj",
"fasdfasd l;kasdfkjkvxcv"
};
}
public void paint(Graphics g) {

         System.out.println(">>paint
0

Witam bardzo serdecznie.

Od pewnego czasu zaglądam sporadycznie na forum (kiedyś byłem jego stałym uczestnikiem ...) i smuci mnie tak małe zainteresowanie Javą. Dlatego z przyjemnością odpowiem na twoje pytania i spróbuję to zrobić w taki sposób aby zainteresować kilka osób tym językiem programowania.

... Oto więc jedna krótka lekcja JAVY ...

JAVA jest obiektowym językiem programowania. Dlatego zrozumienie i rozróżnianie dwóch pojęć jest absolutnie konieczne: Klasa i Obiekt.

Klasa jest typem danych i stanowi jakby przepis na tworzenie Obiektów. (Mówimy że Obiekt jest instancją Klasy - czyli jej wcieleniem). Na bazie jednej klasy można utworzyć dowolnie wiele obiektów (tak samo jak na bazie typu zmiennych "double" można utworzyć dowolnie wiele niezależnych zmiennych). Skoro Klasa jest typem danych, to co ją różni od atomowych typów danych takich jak np. integer ? Otóż W swoim środku Klasa przechowuje zbiór zmiennych razem z funkcjami które operują na tych zmiennych.

Przejście z programowania strukturalnego do obiektowego jest kłopotliwe. Mi osobiście pomógł w tym pewien wypracowany sposób ... wpierw bardzo zwięźle określamy postawiony przed nami problem - czyli spisujemy go na kartce papieru. Następnie śledzimy zapisane przed chwilą polecenie i mechanicznie podkreślamy w nim wszystkie rzeczowniki. Podkreślone słowa są kandydatami na odzielne klasy...

Zacznijmy od obejrzenia wiersz po wierszu twojego kodu (wiem że dla autora jest to bardzo irytujące i z góry przepraszam)

import java.awt.;
import javax.swing.
;
<font color="green">import oznacza "dołącz do przestrzeni nazw wskazane pakiety", dołączamy awt=Abstract Window Toolkit który jest standardowym (aczkolwiek przestarzałym) pakietem tworzenia GUI (Graficznych interfejsów), oraz pakiet swing który jest jego następcą.

Należy zwrócić uwagę na to, że import działa odmiennie od korespondującego polecenia include w języku C++ wstawiającego blok tekstu, import nie powiększa kodu tylko jego abstrakcyjną przestrzeń nazw</span>

public class read extends java.applet.Applet {
<font color="green">deklarujemy nową klasę o nazwie "read", "public" jest specyfikatorem dostępu i oznacza że klasa będzie widoczna i dostępna z dowolnego miejsca programu. "extends" oznacza że tworzona klasa rozszerza możliwości innej klasy - mianowicie Applet (mówimy też że klasa read "dziedziczy" klasę Applet)

W tym wierszu są dwa drobne błędy

  1. mocno zaleca się używanie klasy swingu "JApplet" zamiast przestarzałej Applet
  2. nazwa nowej klasy - "read" jest niezgodna z powszechnie obowiązującą w javie konwencją nadawania nazw (konwencja węgierska) gdzie nazwy klas są zaczynają się z wielkiej litery (tak więc. "Read" a nie "read").</span>

int y;
String[] headlines;
<font color="green">wewnątrz klasy Read deklarujemy zmienne: "y" jest liczbą całkowitą a "headlines" tablicą napisów. W zasadzie wszystko w javie jest obiektem (tzn dziedziczy po klasie Object) za wyjątkiem typów podstawowych takich jak int, double, char, float ... niemniej String jest obiektem (tablica zresztą też jest obiektem - Array)

W programowaniu obiektowym powinno się ukrywać zmienne przed kodem programu spoza klasy. służy do tego specyfikator dostępu "private" i dobrym pomysłem jest użycie go w powyższych deklaracjach. (zmienne te będą wtedy dostępne i widoczne tylko wewnątrz klasy Read) </span>

public void init() {
<font color="green">deklarujemy funkcję o nazwie "init" (konwencja węgierska-nazwy funkcji z małych liter), będzie ona widoczna z każdego miejsca programu (public). Funkcja nie zwraca żadnych wartości (void="pusty")

funkcje wewnętrzne obiektu nazwa się jego "metodami". funkcja init nie jest przypadkowa - zostanie ona wywołana zaraz po uruchomieniu appletu</span>

int y = 76;
String[] headlines = {
"jakis tam sobie tekst",
"teksty do przewija...",
"drasdfad ;fadfasdlkj",
"fasdfasd l;kasdfkjkvxcv"
<font color="green">gaborek - właśnie tu popełniłeś największy bład który uniemożliwia poprawne działanie appletu.

To są dwie deklaracje zmiennych połączone z ich inicjalizacją, przy czym to są zupełnie nowe zmienne w żaden sposób nie powiązane z poprzednio zadeklarowanymi o tych samych nazwach

Chciałeś nadać wartości zmiennym "y" oraz "headlines". Zamiast tego stworzyłeś nowe zmienne o tych samych nazwach. Aby przypisać wartość do starej zmiennej y wystarczy wiersz kodu:
int y=76;
zamienić na
y=76;
i podobnie uczynić z tablicą "headlines"</span>

public void paint(Graphics g) {
<font color="green">metoda paint jest wywoływana przez przeglądarkę za każdym razem gdy applet wymaga ponownego narysowania.

Warto zuważyć że funkcja ta pobiera jeden argument o nazwie "g" który jest obiektem klasy Graphics (nazwy klas z wielkich liter)

Aby odrysowanie przebiegło na pewno poprawnie wywołuje się metodę paint(g) z klasy nadrzędnej (czyli JApplet), dostęp do klasy nadrzędnej jest poprzez słowo kluczowe super, czyli:
super.paint(g)</span>

System.out.println(">>Paint!

0

no z tym drugim pytaniem to sobie poradziłem tuż przed tym jak napisałeś odpowiedź :) ale to pierwsze to masz racje głupi błąd [wstyd] jeszcze nie sprawdziłem czy będzie działać w praktyce ale wiem że tak : TERAZ TO WIDZĘ!!
dzieki!
PS: fajny język ta JAva - polecam

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