🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #153834

Re: Rozróżnianie przycisków

#153834
From: Arivald
Date: Mon, 26 Aug 2013 06:01
86 lines
3594 bytes
W dniu 2013-08-26 07:16, Borneq pisze:
> Użytkownik "Arivald" <NOSPAMarivald@interia.pl> napisał w wiadomości
> news:kvemnh$t1h$1@news.dialog.net.pl...
>> A jeszcze lepiej jest przygotować obiekty dziedziczące po Action, i to
>> na nich tworzyć JButtony. Wtedy każdy button może mieć własną metodę
>> actionPerformed(), albo podobne buttony mogą współdzielić akcję.
>>
>> A co ważniejsze, kod wyprowadzasz do osobnych klas, zamiast wciskać
>> wszytko w jedną. Wersja z if () else if() .... jest po prostu
>> nieefektywna.
>
> Mam 38 przyciskowy kalkulator, czy dla każdego przycisku tworzyć klasę?
> Nawet gdy zbudouję klasę jedną dla kilku podobnych klawiszy, to będzie
> 4-5 klas.
> A może jednak klasa dla wszystkich buttonów, druga dla buttonów z
> shiftem a trzecia może dla trybu wyboru podstawy (dec,hex,bin,oct) czy
> nawet dla każdej z tych podstaw inną klasę?


A czemu nie? Zresztą oczywiście możesz je odziedziczyć po jednej bazowej 
klasie, i całą współdzieloną logikę umieścić w bazowej.


Można też prościej, anonimową klasą ActionListener, wystarczy override 
actionPerformed().



class kalkulator {
   //kody operacji
   public static final int BTN_INV = 1;
   public static final int BTN_INV_SHIFT = 10001;
   public static final String BTN_INV_CAPTION = "Inv";

   public static final BTN_FRACT = 2;
   public static final String BTN_FRACT_CAPTION = "Frac";


   //handler operacji
   private void doSomething(int: code) {
     switch (code) {
       case BTN_INV:
         ....
         break;
       case BTN_FRACT:
         ....
         break;
     }
   }


   private void createGUI()  {
     JButton button;

     button = new new JButton(BTN_INV_CAPTION);
     button.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
         if (actionEvent.getModifiers() & ActionEvent.SHIFT_MASK) {
           doSomething(BTN_INV);
         } else {
           doSomething(BTN_INV_SHIFT);
         }
       }
     });
     //ustaw inne właściwości tutaj
     add(button);

     button = new new JButton(BTN_FRACT_CAPTION);
     button.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
         doSomething(BTN_FRACT);
       }
     });
     //ustaw inne właściwości tutaj
     add(button);

     ....
   }


}

Tak się to robi, bo w Javie nie ma callbacków, jak event handlery w Delphi.

-- 
Arivald
Technical Details
Message-ID: <kver4s$v05$1@news.dialog.net.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
References: <kvagtq$uai$1@node1.news.atman.pl> <kvdv7p$6v6$1@mx1.internetia.pl> <kvemnh$t1h$1@news.dialog.net.pl> <kveoaq$781$1@node1.news.atman.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
From: Arivald <NOSPAMarivald@interia.pl>
Newsgroups: pl.comp.lang.java
Subject: Re: Rozróżnianie przycisków
Date: Mon, 26 Aug 2013 08:01:16 +0200
Organization: Dialog Net
Lines: 87
Message-ID: <kver4s$v05$1@news.dialog.net.pl>
References: <kvagtq$uai$1@node1.news.atman.pl> <kvdv7p$6v6$1@mx1.internetia.pl> <kvemnh$t1h$1@news.dialog.net.pl> <kveoaq$781$1@node1.news.atman.pl>
NNTP-Posting-Host: dynamic-78-8-108-245.ssp.dialog.net.pl
Mime-Version: 1.0
X-Trace: news.dialog.net.pl 1377497052 31749 78.8.108.245 (26 Aug 2013 06:04:12 GMT)
X-Complaints-To: abuse@dialog.net.pl
NNTP-Posting-Date: Mon, 26 Aug 2013 06:04:12 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Thunderbird/23.0
In-Reply-To: <kveoaq$781$1@node1.news.atman.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit