JButton volá metodu – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

JButton volá metodu – Java – Fórum – Programujte.comJButton volá metodu – Java – Fórum – Programujte.com

 

Marek Kadlčík
~ Anonymní uživatel
25 příspěvků
14. 3. 2014   #1
-
0
-

Dobrý den,

Mám velice jednoduchý problém s JButton. JButton volá metodu, ale jde aby ji volal s nějakým parametrem. To znamená, že bych mohl použít, aby několik tlačítek volalo stejnou metodu s různými parametry. Jak toho docílím? Děkuji za odpověď.

Nahlásit jako SPAM
IP: 212.96.185.–
Matrix17
~ Anonymní uživatel
300 příspěvků
14. 3. 2014   #2
-
0
-

Stačí si vytvořit tlačítko, dát mu action listener a z něj zavolat nějakou metodu. Parametry mu tam přidá jaký chceš.

Nahlásit jako SPAM
IP: 213.226.237.–
Marek Kadlčík
~ Anonymní uživatel
25 příspěvků
15. 3. 2014   #3
-
0
-

#2 Matrix17
Na javu teprve přecházím, mohl byste mi prosím ukázat část kódu, která zobrazí tlačítko a po zmáčknutí zavolá metodu se Stringovým parametrem a metoda ho třeba vytiskne? Děkuji.

Nahlásit jako SPAM
IP: 212.96.185.–
vlado09910
Návštěvník
15. 3. 2014   #4
-
0
-

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        System.out.println("#" + evt.getActionCommand() + "#" + evt.paramString());
    } 

evt.getActionCommand() ti vrati jButton2

evt.paramString() vrati ACTION_PERFORMED,cmd=jButton2,when=1394895986573,modifiers=Button1

Staci mat nejaku mapu v programea priradis jButton2 najeku premennu.. ine ma nenapada...

Nahlásit jako SPAM
IP: 92.245.193.–
Matrix17
~ Anonymní uživatel
300 příspěvků
15. 3. 2014   #5
-
0
-

Pokud s javou začínáš, tak bych ti prvně radil spíš konzolový programy... Ale tohle by mělo být, co potřebuješ.

public class MainFrame extends JFrame
{
  private static final long serialVersionUID = 1L;
  
  public MainFrame()
  {
    final String externVar = "Proměnná s textem";
    JButton button = new JButton("Tlačítko");//vytvoří tlačítko s nápisem
    
    button.addActionListener(new ActionListener()//přidá akci tlačítku
    {
      @Override
      public void actionPerformed(ActionEvent arg0)
      {
        System.out.println("Ahoj, testovací výpis do konzole.");
        printText("Funkce - " + externVar);
      }
    });
    
    JPanel panel = new JPanel();
    
    panel.add(button);//přidá tlačítko do panelu
    panel.setPreferredSize(new Dimension(300, 200));//nastaví velikost panelu
    
    this.add(panel);//přidá panel do okna
  }
  
  private void printText(String text)
  {
    System.out.println(text);
  }

  public static void main(String[] args)
  {
    MainFrame frame = new MainFrame();
    
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//nastaví implicitní operaci pro akci kdy uživatel "zažádá" o uzavření aplikace
    frame.pack();//nastaví velikost panelu  na velikost komponenty (tj. toho panelu co má velikost 300x200)
    
    frame.setVisible(true);//zviditelní okno na obrazovku
  }
}

Tohle dělá to, co bys chtěl. De to napsat i líp ale pro začátek snad stačí.

Nahlásit jako SPAM
IP: 213.226.237.–
Kit+15
Guru
15. 3. 2014   #6
-
+1
-
Zajímavé

#5 Matrix17 

Totéž co jsi napsal, ale s objektovým zápisem. Funguje to stejně.

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainFrame extends JFrame {
    private static final long serialVersionUID = 1L;
    JPanel panel = new MainPanel();

    public static void main(String[] args) {
        MainFrame frame = new MainFrame();
    }

    public MainFrame() {
        add(panel);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    class MainPanel extends JPanel {
        private static final long serialVersionUID = 1L;
        JButton button = new Tlacitko("Tlačítko");

        MainPanel() {
            add(button);
            setPreferredSize(new Dimension(300, 200));
        }
        class Tlacitko extends JButton {
            private static final long serialVersionUID = 1L;
            final String externVar = "Proměnná s textem";

            Tlacitko(String title) {
                super(title);
                addActionListener(new ActionListener() {
                    private void printText(String text) {
                        System.out.println(text);
                    }

                    @Override
                    public void actionPerformed(ActionEvent arg0) {
                        System.out.println("Ahoj, testovací výpis do konzole.");
                        printText("Funkce - " + externVar);
                    }
                });
            }
        }
    }
}
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matrix17
~ Anonymní uživatel
300 příspěvků
16. 3. 2014   #7
-
0
-

#6 Kit
Ano tohle je to, co myslel tím, že se to dá napsat líp. :)))

Btw. Objektově zapsaný je oboje. Sice se to chová stejně ale stejně to nefunguje. Proměnná, která měla bejt lokální a v konstruktoru jiný třídy je teď u tlačítka, kde být neměla (právě proto tam musí být final, u tlačítka tohle už neplatí). Funkce, která je private a patří framu (aby ukázala, že jak zavolat metodu jiné třídy) je action listeneru, kde vůbec být nemá.

Nahlásit jako SPAM
IP: 213.226.237.–
Kit+15
Guru
16. 3. 2014   #8
-
0
-

#7 Matrix17
Aha, takhle jsi to myslel. Teď už to opravit nemohu a podruhé se mi to dávat nechce (co když budeš mít další výhradu?) Dal jsem to na https://gist.github.com/kitsaels/9573254

Jsem zvyklý metody dávat co nejblíž k místu volání a v daném případě je jedno, kde ta proměnná a metoda jsou. Ještě lepší by bylo předávat přes Dependency Injection, které funguje i napříč celé aplikaci a je testovatelné. To asi nebylo původním účelem.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Marek Kadlčík
~ Anonymní uživatel
25 příspěvků
16. 3. 2014   #9
-
0
-

Děkuju za příspěvky, funguje to. A k radě "dříve konzolové programy" mám jen to, že se držím pořadí podle knihy Instroduction to Java programming (od Y. Daniela Lianga) a konzolový programy samozřejmě zkouším taky.

Nahlásit jako SPAM
IP: 212.96.185.–
Matrix17
~ Anonymní uživatel
300 příspěvků
16. 3. 2014   #10
-
0
-

#8 Kit
Přesně tak by to mělo být ale je to kanon na vrabce. Jen ta funkce měla reprezentovat funkci z doménový vrstvy ale dělat kvůli tomu tomu dalších x věcí jen abych vytvořil tlačítko v panelu je hroznej overkill. Jen sem chtěl co nejjednoduší příklad a netahat do toho pokud možno nic navíc. Tvůj kód je rozhodně lepší pro pozdější použití. :)

Nahlásit jako SPAM
IP: 213.226.237.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Metoda volá metodu — založil delicacyy

Jbutton a povolování — založil lubanek

JButton - Zaoblené rohy — založil D-Fox

Java swing - JButton — založil petr143

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý