Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Akcija na dugmetu u podklasi

[es] :: Java :: Akcija na dugmetu u podklasi

Strane: 1 2

[ Pregleda: 5336 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

anon315

Član broj: 315
Poruke: 1657
*.adsl.sezampro.yu.



+13 Profil

icon Re: Akcija na dugmetu u podklasi19.06.2006. u 23:52 - pre 217 meseci
Tako je!
 
Odgovor na temu

Java Beograd
Novi Beograd

Član broj: 11890
Poruke: 9517
..yu.220.247.194.in-addr.arpa.



+10256 Profil

icon Re: Akcija na dugmetu u podklasi22.06.2006. u 10:11 - pre 217 meseci
Ja lično mislim da, kad su u pitanju listeneri, najviše nesporazuma i lošeg koda, i loše prakse u startu izazivaju početnički primeri, (kojih ima u svim udžbenicima Jave) gde je na primer

Code:

public class MyApplet extends Applet implements ActionListener {
...
...
          Button myButton = new Button("Click me");
          myButton.addActionListener(this);   // ( ruzno do zlaboga !)

....
}

I uvek se početnik zbuni kakav je to "this", ali brzo nauči da kad doda i actionPerformed(ActionEvent ae) sve lepo radi, i eto nama nevolje i špageti koda i "švajcarskog noža".
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
 
Odgovor na temu

Max Payne
Max Payne
Beograd

Član broj: 58800
Poruke: 333
*.COOL.ADSL.VLine.verat.net.



+6 Profil

icon Re: Akcija na dugmetu u podklasi24.06.2006. u 12:36 - pre 217 meseci
Dakle, drugovi programeri, hvala na pomoći, ali mi niko nije pomogao, osim što sam dobio par dobrih saveta za dalji rad. Malo mi je doduše čudno da neki koji su se ovde javljali imaju iskustva u programiranju u mnogim programskim jezicima, a ne mogu da reše nešto ovako prosto.
Kao što sam već rekao, ko je čitao, suština sveka ovoga i jeste da se razdvoji akcija u posebnu klasu, da ne bi ceo kod pisao u jednoj klasi, jer koliko ja znam, to bi bilo nešto kao proceduralno programiranje. Nije mi jasno zašto ste se svi zakačili za ove dve klase kao da su one same po sebi najvažnije? Otprilike, kao kad se igra neka partija šaha, počne otvaranje, pa sredina partije, i recimo negde u završnici nastane neka zanimljiva pozicija. I onda se ta pozicija, može videti u raznim časopisima i sl. , i ljudi se trude da provale novonastalu situaciju i izvuku neku suštinu za sledeću partiju, ali niko ne pomišlja da je ta pozicija pala s Marsa, nego je svima jasno da se nešto pre toga dešavalo, pa je došlo do ovde dokle je došlo. Isto je i sa ovim kodom. Ja sam zapao u poziciju koju nisam mogao da rešim, jer nemam dovoljno iskustva i kroz ove dve klase sam hteo da konkretno pokažem šta želim da uradim. Mogao sam ja ceo kod iz te dve klase da stavim u jednu klasu i sve bi radilo. Ali ja u mom programčiću, imam mnogo dugmića i tekst fildova i svakojakih čuda još sam zamislio tu.
Ali dobro, bitno je da smo mi nekako rešili problem, a sada ću ja i da vm kažem kako pa da znate svi:
prvo, klasa Akcija ne treba da nasleđuje GlavnuKlasu, nego samo implementira ActionListener. Konstruktor te klase prima objekat tipa JButton, i onda je moguće u GlavnojKlasi napisati ključnu rečenicu koju sam tražio:

dugme.addActionListener(a);

gde je a naravno objekat klase Akcija. Evo Celog koda:

Glavna klasa:
________________________________________
import javax.swing.*;
import java.awt.*;

public class GlavnaKlasa extends JFrame {
JPanel pGlavni = new JPanel(new BorderLayout());
JPanel pPrvi = new JPanel(new FlowLayout());
JButton dugme = new JButton("Biljana");
Akcija a;

public GlavnaKlasa() {
a = new Akcija(dugme);
dugme.addActionListener(a);
dugme.setActionCommand("Biljana");
pPrvi.add(dugme);
pGlavni.add(pPrvi);
setContentPane(pGlavni);
}

public static void main(String[] arg) {

JFrame.setDefaultLookAndFeelDecorated(false);
JFrame Win1 = new GlavnaKlasa();
Win1.setDefaultCloseOperation(EXIT_ON_CLOSE);
Win1.setSize(600, 350);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = Win1.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
Win1.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
Win1.setVisible(true);
}
}
_______________________________________________________
Klasa Akcija:

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Akcija implements ActionListener {
JButton dugme;

public Akcija(JButton d) {
this.dugme = d;
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand() == "Biljana") {
System.out.println("radi");
}
}

__________________________________________________________

E, sad, naravno, ono što bi bilo bolje je i da postoji treća klasa, klasa dugme, gde će biti sav kod vezan za konkretno dugme. A u klasi akcija, sve akcije vezane za to dugme. A te dve klase bi se mogle povezati sa paternom MEDIATOR. I patern komand bi mogao takođe da se iskoristi.

Tako da, hvala svima još jednom, ali... šta da vam kažem...
 
Odgovor na temu

logotet
Beograd

Član broj: 49849
Poruke: 42
..taman-bg.customer.sbb.co.yu.

Sajt: www.logotet.com


Profil

icon Re: Akcija na dugmetu u podklasi24.06.2006. u 14:17 - pre 217 meseci
Samo kratak osvrt. Prvo si rekao:
Citat:
Max Payne: Ma hoću da izmenim, samo mi ne dirajte glavni metod :).

, a onda ipak vidis da mora da se nesto promeni, doduse ne u main() vec u GlavnojKlasi, ali mislim da sam ti prosli put objasnio svrhu main() metode.

Sada kazes da si sklonio nasledjivanje iz klase Akcija.
Sam naslov teme podrazumeva da nasledjivanja ima, ti si postavio pitanje kako da potklasa vidi dugme iz nadredjene klase. Svi koji su ti davali savete su te upozoravali na razne aspekte, ali si uporno branio neke osnovne postavke iz tvog problema. Nije korektno zamerati ljudima sto su se drzali pitanja iz naslova teme.
Na kraju, kazes da si resio, pokazujes kako i (ako je to ceo kod) ja te sada pitam:

"A cemu sluzi JButton dugme u klasi Akcija?"

Zar ne vidis da je nepotrebno ?

Onog trenutka kada kazes
Code:
dugme.addActionListener(a)

dugme ZNA za akciju, i nepotrebno je da akcija ZNA za dugme!
To je ono neki autori nazivaju Class Responsibility i esencijalno je za razumevanje OO principa.
 
Odgovor na temu

Max Payne
Max Payne
Beograd

Član broj: 58800
Poruke: 333
*.COOL.ADSL.VLine.Verat.NET.



+6 Profil

icon Re: Akcija na dugmetu u podklasi24.06.2006. u 18:14 - pre 217 meseci
A, da, da, ok za JButton, nisam razmišljao, ostade mi to od raznih kombinacija koje sam pokušavao, pa sam bio sav srećan kad je proradilo. A upravu si i za naziv teme, malo sam tu zbunio ljude. Mada opet jasno da je moralo nešto da se promeni. Hvala na savetima pozdrav
 
Odgovor na temu

anon315

Član broj: 315
Poruke: 1657
*.adsl.sezampro.yu.



+13 Profil

icon Re: Akcija na dugmetu u podklasi24.06.2006. u 19:46 - pre 217 meseci
Citat:

Mada ja vise praktikujem stil gde se koristi tzv. bezimena klasa, npr:

Code:

JButton ok = new JButton("OK");
ok.addActionListener(new ActionListener() {  
            public void actionPerformed(ActionEvent event) { // Radi nesto } 
});


Osim u slucaju da se osluskivac koristi na vise mesta, pa onda pises posebnu ugnjezdenu klasu...


No comment...
 
Odgovor na temu

[es] :: Java :: Akcija na dugmetu u podklasi

Strane: 1 2

[ Pregleda: 5336 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.