[ Bope @ 26.10.2008. 21:06 ] @
Da li postoji neki nacin da "isecem" AWT kontrolu (recimo,label) ili prozor na onaj nacin na koji to radim u C#-u - odredim putanju,prosledim je "Region" svojstvu kontrole/prozora i to je to,van naznacene putanje (regiona) kontrola ne postoji?

Konkretno,zelim da od AWT label kontrole napravim kontrolu u obliku elipse
[ gajo2 @ 27.10.2008. 07:58 ] @
Mozes tako sto crtas svoju kontrolu, recimo elipsu, pa napravis da klikovi misa ne reaguju van elipse.

1) Napravis novu komponentu koja nasledjuje recimo JLabel
2) Overridujes njegovu paintComponent() metodu:
Code:
public void paintComponent(Graphics g) {
  g.setColor(getBackground());
  g.fillRect(0,0,getWidth(),getHeight());
  g.setColor(getForeground());
  g.drawElipse(0,0,getWidth(),getHeight());
}

3) U konstruktoru objekta dodas MouseListener:
Code:
this.addMouseListener(new MouseAdapter() {
  public void mouseClicked(MouseEvent me) {
     if (me.getButton() == MouseEvent.BUTTON1 && misSeNalaziUnutarElipse(me.getX(),me.getY()) {
          // akcije na klik
     }
  }
});


Ako zelis da ti se labela iscrtava kao i uvek, samo zelis da odseces delove koje se nalaze van elipse, onda opet radis sa paintComponent() metodom.
Code:
public void paintComponent(Graphics g) {
  super.paintComponent(g);  // iscrtaj labelu kao obicno
  // odseci ostatak (napisi svoj postupak)
}
[ Bope @ 27.10.2008. 14:46 ] @
Aha,a ako zelim da isecem AWT Panel? Video sam da on ima PaintComponents ali to nije to,to se odnosi na kontrole koje sadrzi?
[ gajo2 @ 28.10.2008. 07:01 ] @
Zasto uopste koristis AWT panel? Koliko znam, ne postoji nikakav razlog zasto ne bi koristio Swing, a nacin kako to da radis u Swingu imas objasnjeno u prethodnom postu.

Kao sto pise ovde, AWT komponente se iscrtavaju od strane sistema, tako da ne mozes sam kontrolisati sta ce, kako i kada da se iscrta. Zbog toga nemas paintComponent() metodu, jer nemas kontrolu nad iscrtavanjem komponente. Ono sto si ti nasao je paintComponents() i primeti da ima s na kraju, tj. to nije isto. Medjutim, i AWT komponente moraju da implementiraju paint() metodu, koja je inace callback sistemskoj funkciji koja iscrtava dugme. Ovo je cista pretpostavka, ali mozda mozes da overridujes paint() metodu, tako da prvo super.paint() iscrta panel, pa posle ti na njega nacrtas invertovanu elipsu tako da sakrijes delove komponente.
[ Dejan Lozanovic @ 29.10.2008. 11:10 ] @
Mislim da ti radis to na pogresan nacin :) Umesto da nasledjujes komponente i da ih rucno crtas bolje promeni look & feel, ili napravi novi po svojoj potrebi.

http://java.sun.com/docs/books.../uiswing/lookandfeel/plaf.html
http://java.sun.com/products/jfc/tsc/articles/sce/index.html
[ Bope @ 29.10.2008. 12:53 ] @
Hvala ljudi!
U principu ceo program sam prebacio u swing i paintComponent mi vrsi posao bas kao sto i treba

Malo sam razocaran sto Java nema mehanizam za "fizicko" isecanje kontrola (tako da kontrola zaista ne postoji van naznacene putanje) pa moram rucno da se petljam sa ogranicavanjem osetljivosti na klik misa,ali Boze moj....Malo duze sam koristio C# pa mi Java izgleda kao jedno veliko komplikovanje (eh,trebalo je navici se na nedostatak delegata u Javi )
[ Dejan Lozanovic @ 29.10.2008. 13:19 ] @
Citat:
Bope: Hvala ljudi!
(eh,trebalo je navici se na nedostatak delegata u Javi :D)


Koristi eclipsu pa ih generisi.
[ gajo2 @ 30.10.2008. 07:41 ] @
Citat:
Bope: Hvala ljudi!
U principu ceo program sam prebacio u swing i paintComponent mi vrsi posao bas kao sto i treba :)

Malo sam razocaran sto Java nema mehanizam za "fizicko" isecanje kontrola (tako da kontrola zaista ne postoji van naznacene putanje) pa moram rucno da se petljam sa ogranicavanjem osetljivosti na klik misa,ali Boze moj....
Pa i onaj .NET-ov region verovatno radi isto, samo sto uradi za tebe. Ako budes cesto koristio ovakve isecane komponente onda napravi sebi biblioteku pa da uvek koristis iste komponente (a ne bih se cudio da negde na internetu vec postoji neka slicna freeware komponenta).

Citat:
eh,trebalo je navici se na nedostatak delegata u Javi
Pa imas nacina kako da simuliras delegate, ali slazem se da je steta sto dizajneri Jave taj feature uporno ne zele da ubace
[ Bope @ 30.10.2008. 07:56 ] @
Citao sam da ne zele da ubace delegate zato sto smatraju da bi to kvarilo objektnu orijentisanost programa :S
Pa ako je efikasno,sta fali,nije nista strashno?