aplet, pare pytań

aplet, pare pytań
DA
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 11 lat
  • Postów:24
0

Witam
Mam pare pytan zwiazanych z apletami i poposiłbym o odpowiedz:

  1. czy da sie aby nie dalo sie zmieniac w aplecie rozmiaru? jak w JJFrame jest setResizable
  2. w moim aplecie rysuje na panelu ktory jest do apletu dodany. Chcałbym zrobić okno powitalne z paskiem postepu. Mógłby ktoś powiedzieć jak to zrobić można> w aplikacji moglbym zrobic np dodatkowa ramke ktora po okreslonym czasie ustawila by sie na setVisible(false).
  3. dlaczego gdy zmieniam rozmiar apletu to on mruga? korzystam z podwojengo buforowania. Czy dlatego ze rysuje na panelu a nie w aplecie?

pozdrawiam i dziekuje za odpowidzi

Kerai
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:London
0
dafra napisał(a)
  1. czy da sie aby nie dalo sie zmieniac w aplecie rozmiaru? jak w JJFrame jest setResizable

Przecież się nie da... rozmiar apletu ustala się w HTML, użytkownik tego nie może zmienić.

dafra napisał(a)
  1. w moim aplecie rysuje na panelu ktory jest do apletu dodany. Chcałbym zrobić okno powitalne z paskiem postepu. Mógłby ktoś powiedzieć jak to zrobić można> w aplikacji moglbym zrobic np dodatkowa ramke ktora po okreslonym czasie ustawila by sie na setVisible(false).

Do zmieniania pomiędzy 'stanami' użyłbym CardLayout, zamiast usuwać i dodawać panele...

Ale jeśli chodzi o wczytywanie, to i tak twoje okienko nie pokaża się dopóki cały jar nie zostanie wczytany...
Można oczywiście deploynąć applet przez jnpl, podając osobny jar jako resources i wtedy jakoś da się zrobić pasek postępu (w końcu sam kod ściągnie się szybciutko)
Nigdy sam tego nie próbowałem w ten sposób, ale możesz spróbować.
http://docs.oracle.com/javase/tutorial/deployment/applet/customProgressIndicatorForApplet.html

dafra napisał(a)
  1. dlaczego gdy zmieniam rozmiar apletu to on mruga? korzystam z podwojengo buforowania. Czy dlatego ze rysuje na panelu a nie w aplecie?

Korzystasz z JApplet czy Applet?

DA
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 11 lat
  • Postów:24
0

dziękuję Ci bardzo za odpowiedz. Co do 1 pytania to na razie nie wrzucam tego na strone tylko przy uruchomieniu z Eclipsa, więc tego sie nie da?
3. korzystam z JApplet

mam jeszcze jedno pytanie - otóż gdy uruchomie aplet panel jest jakby przesunięty w prawo i w dół że u góry i z lewej strony panelu mam pustkę, gdy tylko spróbuje zwiększyć czy zmiejszyć myszką wielkość okienka z apletem panel pojawia się tam gdzie ma być? Wiesz co moze byc nie tak? Powinienem zarzucić kod lecz chwilowo nie ma mnie na moim komputerze.

Dziękuję raz jeszcze za odpowiedzi i pomoc
Pozdrawiam

edytowany 2x, ostatnio: dafra
Olamagato
  • Rejestracja:ponad 16 lat
  • Ostatnio:14 dni
  • Lokalizacja:Polska, Warszawa
  • Postów:1058
0

ad1) Panel domyślnie ma stały rozmiar ustawiony w html. Natomiast sam aplet może zażądać od przeglądarki (lub applet viewera - dokładnie od kontrolera sandboxa) zmiany swojego rozmiaru. Zmiana taka może zostać przeprowadzona lub żądanie może zostać odrzucone. W ten sposób użytkownik może teoretycznie sam kontrolować rozmiar apletu. Na przykład aplet na swoich granicach może zmieniać kursor myszy na strzałki, użytkownik może "przesunąć" krawędź i może to pójść z apletu jako żądanie zmiany rozmiaru - podobnie jak zmienia się rozmiar okienka). Jaki tego będzie efekt i czy strona się wtedy nie rozsypie - to zależy od wielu rzeczy - w tym od przeglądarki.

ad2) Jeżeli wykombinowałeś aplet, który jest tak kosmicznie czasochłonny, że lepiej aby się ładował etapami, to najprościej zrobić aplet, na który będzie składał się z panel a z jakimś paskiem postępu, albo inna graficzką gdy w tym czasie aplet może robić coś czasochłonnego (na przykład ładować kolejne klasy/dane itp. cuda na kiju). Na koniec z JAppletu puszczasz remove oraz add na nowy utworzony w międzyczasie panel i zwykle to działa. Równie dobrze aplet może sobie otworzyć nowe okno top-level, aby nie być uwiązanym do okna w przeglądarce, albo wręcz może się przełączyć na tryb fullscreen, o ile nie zatrzyma mu tego security manager. Tak robią niektóre gry (wiele z takich było na kórniku).

ad3) Aplet Ci mruga ponieważ tło apletu jest zawsze domyślnie mazane przez clearRect przy każdej zmianie rozmiaru - czy Ci się to podoba czy nie. Podobno można temu zaradzić przez przejęcie kontroli nad myszą i podczas wleczenia myszą krawędzi zmianę zawartości wywoływanej przez paint tak aby nie wywoływać super.paint, a rysować jedynie ramkę w trybie xor (tak jak na starym Windows 95). Ewentualnie można spróbować przedefiniować metodę clearRect, tak aby przestawała działać kiedy się tego życzy.

Trochę rozwinąłem post Keraia. :)

Co do ostatniego pytania, to pokaż Twój kod dla tego apletu w html. Rozmieszczenie apletu na stronie jest też silnie uzależnione od typu przeglądarki (i wersji) oraz od tego co się nasmarowało w metodzie init().


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?
DA
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 11 lat
  • Postów:24
0

poprzednie problemy ustąpiły, lecz pojawiły sie kolejne :P

  1. czy da się jakoś wejść w menu Apletu ?
  2. dodałem sobie do mojego Apletu własne menu lecz gdy chce je rozwinąć to mi zanika i jest pod obrazkiem( korzystam z podwójnego buforowania). Da się to jakoś obejść. Rysuje na panelu .
    Poniżej daje kod klasy Apletu
Kopiuj
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;

import javax.swing.*;


public class JJAplet  extends JApplet implements KeyListener,ActionListener {
	int height;
	int width ;
	Display anim;
    Image image;
    int press = 0;
    // wykreslacz ekranowy
Graphics2D device;
    // wykreslacz bufora
Graphics2D buffer;
	int status = 0;
	Hello hello;
	Thread b;

	public void init()
	{
		
	     addKeyListener(this);
	     anim = new Display();  
	     resize(anim.Max_X,anim.Max_YY  + 20);
	     JMenuBar menuBar = new JMenuBar();
		 
		 JMenu editMenu = new JMenu("Plik");
		 JMenuItem item = new JMenuItem("HighScores");
		 item.addActionListener(this);
		 editMenu.add(item);
		 menuBar.add(editMenu);
		 
	   	 getContentPane().add(anim);
	     this.setJMenuBar(menuBar);

	     do{
	     anim.name = JOptionPane.showInputDialog(this,"Podaj swoje imie. Min 3 znaki");
	     if (anim.name == null) anim.name = "1";
	     }while(anim.name.length()<3);
	     this.show();
         
	}
	
	public void start()
	{
		if(anim.b == null){
			anim.startAnimation();
			anim.b = new Thread(anim);
			anim.b.start();
		}
	}
	
	public void stop()
	{
		anim.b = null;
	}
	
	
	public void keyPressed(KeyEvent arg0) {
		if(arg0.getKeyChar() != 'p')
		anim.player.set(arg0);
		else pause();
		
	}
	
	public void pause(){
		press++;
		if(press%2 == 0){
		anim.b.suspend();
		JOptionPane.showMessageDialog(null, "Game Paused");

		}
		else anim.b.resume();
	}

	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub
			
}

	@Override
	public void actionPerformed(ActionEvent arg0) {
	 LoadHighScore();	
	}
	
		
	public  void LoadHighScore(){
        try{
            File fh = new File("HighScores.txt");
            FileReader fr= new FileReader(fh);
            BufferedReader buf = new BufferedReader(fr);
            
            String tmpl = buf.readLine();
            buf.close();
            int comma=0;
            int dot = 0;
            if (tmpl!=null){
                comma = tmpl.indexOf(",");
                dot = tmpl.indexOf(".");
                String tmps = tmpl.substring(0,comma);
                String pl = tmpl.substring(comma+1,dot); 
                //System.out.println(tmps);
                JOptionPane.showMessageDialog(this, "High Score = "+ Integer.valueOf(tmps)+ " is set by Player " + pl);
            }
                            
        } catch (IOException e){
        	 JOptionPane.showMessageDialog(this, "You are a first player");
        }
}

}

Olamagato
  • Rejestracja:ponad 16 lat
  • Ostatnio:14 dni
  • Lokalizacja:Polska, Warszawa
  • Postów:1058
0

Kilka uwag, które mi się narzuciły:

  1. Używasz przestarzałego modelu wątków, co objawia się używaniem metod Thread.suspend() i Thread.resume(). Są one nieakceptowalne - szczególnie w apletach, które używając Swinga mają wymagania co do poprawności aplikacji mają nawet wyższe niż "stacjonarne" programy swingowe. Powinieneś zastąpić ich wywołanie zmianą jakiejś zmiennej, która zatrzyma/przerwie pętlę animacji w konkretnym wątku. Ewentualnie dziedzicząc po Thread można dołożyć metodę, której wywołanie będzie ustawiało lokalne pole w takim obiekcie i to pole będzie sterowało działalnością metody run().
  2. Zapomnij o akceleracji grafiki w apletach. Możliwości graficzne apletów są takie jakie oferuje przeglądarka i nie większe. Można to zaliczyć do "przedwczesnej optymalizacji". Zamiast lepszego wyświetlania dostaje się masę niepotrzebnych efektów ubocznych. No chyba, że jako aplet zrobisz grę na poziomie zbliżonym do Guild Wars, wtedy taka próba optymalizacji grafiki będzie jak najbardziej na miejscu. :)
  3. Wątek jest w Javie zasobem systemowym, którego nie można zniszczyć przez zgubienie do niego referencji. Najpierw wątek trzeba zakończyć aby móc zwolnić pamięć dla niego i dopiero przy obu spełnionych warunkach jest on usuwany. Dlatego instrukcja anim.b = null w stop() nie ma sensu. Gubisz referencję do działającego wątku.
  4. Metody start i stop nie muszą być komplementarne. Nie jest powiedziane, że ilość wywołań start będzie równa ilości wywołań stop, ani tego, że będą one wywoływane naprzemiennie. Musisz to uwzględniać. Metoda start i stop muszą sensownie obsługiwać chowanie i pojawianie się apletu, ale metody te mogą by wywoływane wielokrotnie po sobie - czasem bez większego sensu.
  5. Nigdy i w żadnej metodzie obsługi zdarzenia nie rób niczego o czym wiesz, że może trwać więcej niż kilkadziesiąt milisekund. Wszelkie wywoływania pause, sleep itp. są w nich bez sensu bo zatrzymują kolejkę zdarzeń Swinga, która jest odpowiedzialna za grafikę GUI w Javie. Stąd zapewne masz problemy z wyświetlaniem menu (niektóre).

Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)