Article View: pl.comp.lang.java
Article #153834Re: Rozróżnianie przycisków
From: Arivald
Date: Mon, 26 Aug 2013 06:01
Date: Mon, 26 Aug 2013 06:01
86 lines
3594 bytes
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-mailReferences:
<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