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

Akcija na dugmetu u podklasi

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

Strane: 1 2

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Max Payne
Max Payne
Beograd

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



+6 Profil

icon Akcija na dugmetu u podklasi16.06.2006. u 21:53 - pre 217 meseci
Da li neko zna rešenje sledećeg problema? Ali, ako je moguće, da se u ove dve klase reši stvar, dakle da iz podklase stavim akciju na dugmetu iz nadklase. Prva klasa izgleda ovako:


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

public GlavnaKlasa() {
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);
}
}
A druga:

public class Akcija extends GlavnaKlasa implements ActionListener {

public Akcija() {

dugme.addActionListener(); // ovde naravno crveni Idea
dugme.setActionCommand("Biljana");
}

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

Dakle, ovo ne radi, tj. dugme ne prima komandu, odnosno, kako da stavim osluškivač na dugme u ovoj drugoj klasi? Znam da sve ovo može da radi iz jedne klase, to nije problem, ali može li ovako nešto da se izvede?
 
Odgovor na temu

anon315

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



+13 Profil

icon Re: Akcija na dugmetu u podklasi17.06.2006. u 00:12 - pre 217 meseci
Kolko vidim na brzaka, trebalo bi ovako:

Code:

dugme.addActionListener(this);


Odnosno:

Code:

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

public class Akcija extends GlavnaKlasa implements ActionListener {

       public Akcija() {

           dugme.addActionListener(this);  // SADA CE DA RADI!
           dugme.setActionCommand("Biljana");
       }

       public void actionPerformed(ActionEvent e) {
           if (e.getActionCommand() == "Biljana") {
               System.out.println("radi");
           }
       }
       
       public static void main(String[] arg) {

           JFrame.setDefaultLookAndFeelDecorated(false);
           JFrame Win1 = new Akcija();
           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);
       }
       
    }


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...
 
Odgovor na temu

sasa_vu
Beograd

Član broj: 62061
Poruke: 200

Sajt: www.fuckoffimbusy.com


+53 Profil

icon Re: Akcija na dugmetu u podklasi17.06.2006. u 01:45 - pre 217 meseci
Meni se cini da Max Payne-a interesuje da razdvoji prikaz i akciju u vise klasa.Odnosno da iz jedne klase poziva akciju iz druge klase.
==================================
Prva klasa=glavna
==================================
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Paneli extends JFrame{

JPanel glavni = new JPanel(new BorderLayout());
JPanel prvi = new JPanel(new FlowLayout());

Dugmici dugmiciPanel = new Dugmici();

/** Creates a new instance of Paneli */
public Paneli() {

prvi.add(dugmiciPanel);
glavni.add(prvi);
setContentPane(glavni);

}
public static void main(String[] arg) {

JFrame.setDefaultLookAndFeelDecorated(false);
JFrame Win1 = new Paneli();
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);
}
}
==========================================================
Druga klasa=panel sa dva dugmeta
===========================================================
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class Dugmici extends JPanel implements ActionListener{

Akcije a = new Akcije();

JPanel panelPrikaz = new JPanel();
JButton dugmeA = new JButton();
JButton dugmeB = new JButton();

/** Creates a new instance of Dugmici */
public Dugmici() {

this.setLayout(new FlowLayout());
dugmeA.setText("aaaa");
dugmeB.setText("bbbb");
dugmeA.addActionListener(this);
dugmeA.setActionCommand("a");
dugmeB.addActionListener(this);
dugmeB.setActionCommand("b");
this.add(dugmeA);
this.add(dugmeB);
setVisible(true);

}

public void actionPerformed(ActionEvent e) {
if(e.getActionCommand() == "a"){
a.stampajA();
}
if(e.getActionCommand() == "b"){
a.stampajB();
}
}

}
=======================================
Treca klasa=neke akcije
=======================================
import java.awt.Color;
public class Akcije {

/** Creates a new instance of Akcije */
public Akcije() {
}

public void stampajA(){
System.out.println("aaaaaaa");
}
public void stampajB(){
System.out.println("bbbbbbbbb");
}
}
==========================================
Pozzz
I've seen things you people wouldn't believe. Attack ships on fire off the shoulder of Orion. I watched C-beams glitter in the dark near the Tannhauser gate. All those moments will be lost in time, like tears in rain. Time to die.
 
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 podklasi17.06.2006. u 08:56 - pre 217 meseci
Vanja,
NECE DA RADI! Bar nece kod mene, u tome i jeste problem.

Citat:

public Akcija() {

dugme.addActionListener(this); // SADA CE DA RADI!
dugme.setActionCommand("Biljana");
}


Ovako kad se stavi osluskivac na dugme u drugoj klasi, nece da ga prihvati, ne znam zasto.
Sasa_vu, nije losa ideja, jos cu da razmislim, ali bi voleo i ovo gore da resim. Pozdrav svima
 
Odgovor na temu

anon315

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



+13 Profil

icon Re: Akcija na dugmetu u podklasi17.06.2006. u 10:03 - pre 217 meseci
Ne znam sta da ti kazem, kod mene radi:



Da li su ti klase u istom paketu?
Prikačeni fajlovi
 
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 podklasi17.06.2006. u 10:45 - pre 217 meseci
Dakle, ne razumem. Jednostavno neće. Vidim da si ti stavio glavni metod u drugu klasu, Akcije, probao sam i to, i opet ne radi. Koristim Intelij Ideu 5.1 i javu 6, ne verujem da to ima neke veze. Da li ja nešto ne vidim u ovom mom kodu, evo šaljem ga opet:
1. 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");

public GlavnaKlasa() {
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);
}
}

2. druga klasa Akcije

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class Akcija extends GlavnaKlasa implements ActionListener {

public Akcija() {

dugme.addActionListener(this);
dugme.setActionCommand("Biljana");
}

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

Ništa ne crveni ali neće da odradi akciju.
 
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 podklasi17.06.2006. u 10:49 - pre 217 meseci
Aaaaaa, sad tek vidoh
JFrame Win1 = new Akcija();

sad radi. Ali u čemu je štos, možeš li malo da mi objasniš ovo?
 
Odgovor na temu

anon315

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



+13 Profil

icon Re: Akcija na dugmetu u podklasi17.06.2006. u 10:55 - pre 217 meseci
Pa normalno ;)

Prvi put sam kopi-pejstovao, pa sam i ja imao JFrame Win1 = new GlavnaKlasa() i tada nije htelo da radi.

A prosto treba da instanciras frejm Akcija i to je to, ne znam sta ti tacno nije jasno?

Poz.
V
 
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 podklasi17.06.2006. u 12:20 - pre 217 meseci
Pa, pravim jedan programcic, i ovo je bio problem na koji sam naisao. Struktura koju sam zamislio izgleda ovako

http://www.geocities.com/anmarkovi/

E, sad ako izmenim glavni metod kao sto kazes, onda upadam u druge probleme. Idealno bi bilo kad bi ovo moglo da se resi u one dve klase s pocetka, dakle bez izmena glavnog metoda, ali ako vec to ne moze onda cu nesto drugacije da budzim, mozda kao sto rece sasa_vu.
Pozdrav
 
Odgovor na temu

anon315

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



+13 Profil

icon Re: Akcija na dugmetu u podklasi17.06.2006. u 12:35 - pre 217 meseci
Pa nista, onda zaadrzi klasu akcija kakva ti je bila, a samo u GlavnaKlasa koristi ovo:

Code:

JFrame Win1 = new Akcija();
 
Odgovor na temu

anon315

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



+13 Profil

icon Re: Akcija na dugmetu u podklasi17.06.2006. u 12:36 - pre 217 meseci
Aha, mada sad shvatam da ti ni to nece resiti problem jer onda imas akciju, a ne glavnu klasu?

Mada mozes da razmotris i reorganizaciju. Ja se, npr, trudim da kada oganizujem neki projekat, zadrzim dobar nacin programiranja, a da i organizacija bude onakva kakva mi pasuje, mada obicno se ovo drugo prilagodjava prvom ;)

Poz.
 
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 podklasi17.06.2006. u 13:08 - pre 217 meseci
Hvala na pomoci, nesto cu vec da smislim, mada mi se onako sve lepo uklapalo, ali sta da se radi, takav je zivot :) . Pozdrav
 
Odgovor na temu

tiranin
Dorćol

Član broj: 37185
Poruke: 245
..taman-bg.customer.sbb.co.yu.



Profil

icon Re: Akcija na dugmetu u podklasi18.06.2006. u 19:15 - pre 217 meseci
Pa, ovako, na brzinu mislim da je ono sto je odmah predlozeno
Code:

dugme.addActionListener(this);

bilo dovoljno, ali samo testiranje sa
Code:

if (e.getActionCommand() == "Biljana") 

ne valja jer se stringovi porede sa equals().
 
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 podklasi18.06.2006. u 20:32 - pre 217 meseci
Dakle, problem je sledeći: ono što je predloženo nije dovoljno, tj.kad se u onaj moj kod na početku, bez drugih izmena, stavi dugme.addActionListener(this); nema nikakve akcije na dugmetu. Ja bi hteo to da rešim, ali bez nekih drastičnih izmena koda. Jer, ovo je samo isečak iz celog programa, koji mi predstavlja problem. Znam ja da je to moguće rašiti na razne načine, ali ja bi hteo da to rešim u ove dve klase koje sam naveo, ako je moguće
 
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 podklasi19.06.2006. u 12:00 - pre 217 meseci
Pa, sta je problem u onome sto je vec receno da u main() stavis
Code:
JFrame Win1 = new Akcija();


To resava problem i ne vidim sta je tu sporno. Tvoja klasa Akcija je JFrame i istovremeno ActionListener i to je valjda ono sto si zeleo.
Ne znam doduse zasto insistiras na ovakvom konceptu, ali problem je resiv, i to ti je vec ovde neko odgovorio.
 
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 podklasi19.06.2006. u 17:30 - pre 217 meseci
Pa problem je što
Citat:
ovo je samo isečak iz celog programa

i što
Citat:
Ja bi hteo to da rešim, ali bez nekih drastičnih izmena koda

i što
Citat:
Znam ja da je to moguće rašiti na razne načine, ali ja bi hteo da to rešim u ove dve klase koje sam naveo, ako je moguće
.
Dakle, ako je moguće u one dve klase onakve kakve jesu na početku. Ako nije moguće, hvala u svakom slučaju.
 
Odgovor na temu

anon315

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



+13 Profil

icon Re: Akcija na dugmetu u podklasi19.06.2006. u 18:12 - pre 217 meseci
Meni se cini da ti hoces da popravis gresku, tako sto nista neces da izmenis, e pa to ne moze...
 
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 podklasi19.06.2006. u 19:09 - pre 217 meseci
Ma hoću da izmenim, samo mi ne dirajte glavni metod .
Ili možda da postavim drugo pitanje: postoji li neki patern ili neko rešenje pomoću koga se sve akcije mogu smestiti u posebnu klasu?
I još: može li neko da preporuči neku knjigu, skriptu ili nešto o organizaciji klasa, hijerarhiji, uopšte dakle o planiranju programa, ili nešto o paternima da je provereno dobro i razumljivo, po mogućnosti na srpskom ali može i na engleskom?
 
Odgovor na temu

milas

Član broj: 29337
Poruke: 588
*.ptt.yu.



+3 Profil

icon Re: Akcija na dugmetu u podklasi19.06.2006. u 19:47 - pre 217 meseci
Naravno, tu je biblija softverski paterna (Design patterns), kod nas u izdanju CET-a pod nazivom "Gotova resenja". Tu je koriscen C++, ali sve vazi i za Javu (zbog slicne sintakse). Imas i "Projektne obrasce" kod Mikro knjige na srpskom. A na engleskom je izbor i vise nego dobar,....
 
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 podklasi19.06.2006. u 21:21 - pre 217 meseci
Citat:
Max Payne: Ma hoću da izmenim, samo mi ne dirajte glavni metod :).

Sta ti to znaci ? Metoda main() nije deo klase GlavnaKlasa. To deluje cudno i netacno, jer se nalazi u istom source fajlu, ali mozes celu metodu da prebacis u potpuno novu kasu i sve ce da radi. Main() se stavlja u neku klasu jer je tako lakse za kucanje, organizaciju koda ...,
ali samo je pri aktiviranju JVM vidi kao GlavnaKlasa.main() i to je cela veza izmedju main() i klase.

Citat:
Max Payne: ... ili nešto o organizaciji klasa, hijerarhiji, uopšte dakle o planiranju programa...

Moras da razumes objektno-orijentisani koncept, paradigmu ... To nisu samo teoretska naklapanja vec je sustinsko. Moras da razumes i klase, objekte, enkapsulaciju, nasledjivanje, polimorfizam, asocijacije, agregacije ...
Koliko ja vidim tebi je veoma blizak proceduralni nacin razmisljanja.
Sta ti znaci da hoces sve akcije da stavis u jednu klasu? Akcija je objekat kao i svaki drugi, s tim sto ima osobinu da reaguje na dogadjaj, zato sto se registrovao kao slusalac(listener) objektu koji taj dogadjaj generise. U tvom slucaju JButton dugme generise dogadjaj, a objekat klase Akcija se prijavljuje da "osluskuje" i nesto odradi kada se dogadjaj dogodi.
Dalje, koliko objekata ti prepoznajes u svom primeru? Imas objekat klase GlavnaKlasa koji je JFrame, srpski receno "prozor". Njegova osobina pored ostalog je da se pojavi na monitru. On ima (kompozicija) kao svoje delove neke druge objekte (Jpanel), koji pak ima JButton dugme.
A sta je Akcija ? Tvoj objekat klase Akcija je takodje prozor, koji pored svega ostalog se registruje da osluskuje kada dugme objavi da se dogodio "klik". Da li ti je neophodno da prozor (glavni !?) istovremeno bude i akcija?
I dalje da ne razglabam, moras celu pricu tako da shvatis, objekti medjusobno komuniciraju preko metoda, salju poruke ...Teorija cesto zna da bude suvoparna, dosadna, ali je ovde izuzetno vazno da shvatis pricu o objektima, sta je cija odgovornost ... Moras na neki nacin da pocnes da "razmisljas objektno".

 
Odgovor na temu

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

Strane: 1 2

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

Postavi temu Odgovori

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