Thread View: pl.comp.lang.java
6 messages
6 total messages
Started by Borneq
Sat, 24 Aug 2013 14:45
Rozróżnianie przycisków
Author: Borneq
Date: Sat, 24 Aug 2013 14:45
Date: Sat, 24 Aug 2013 14:45
47 lines
2440 bytes
2440 bytes
Chcę napisać przykładowy kalkulator, ale nie zwykły, którego źródła można
spotkać w książkach do programowania. Kalkulator będzie miał wiele trybów,
naciśnięcie klawisza shift na przykład spowoduje że klawisze przybiorą inne
teksty.
Chciałem zrobić to tak, że klawiasze będą miały różne tagi: 0,1,2,3,4...
Dodatkowo będą rózne kody operacji jak
BTN_INV
BTN_FRACT
BTN_LOG
BTN_10_x
BTN_LN
BTN_e_x
Mają być tablice konfiguracji: Jedna to klawisze bez shifta:
BTN_INV
BTN_LOG
BTN_LN
A driuga klawiasze z schiftem
BTN_FRACT
BTN_10_x
BTN_e_x
Naciskam klawisz, odczutuję jego tag, patrzę w tablicy i odczytuję kod.
Ale w JButton nie mam tagów a jedynie rozróżnianie po nazwie:
Przykład
http://examples.javacodegeeks.com/desktop-java/swing/jbutton/handle-action-events-for-jbutton/
JButton button1 = new JButton("Yes");
JButton button2 = new JButton("No");
//set action listeners for buttons
button1.addActionListener(this);
button2.addActionListener(this);
//add buttons to the frame
add(button1);
add(button2);A potem rozróznianie public void
actionPerformed(ActionEvent ae) {
String action = ae.getActionCommand();
if (action.equals("Yes")) {
System.out.println("Yes Button pressed!");
}
else if (action.equals("No")) {
System.out.println("No Button pressed!");
}
}Nie za bardzo mi się to podoba, po klawisz moze miec rózny tekst w
zależnośc od akcji, natomiast moze być kilka klawiaszyz tym samym tekstem,
na przykład pustym.Jak to rozwiązać?
Re: Rozróżnianie przycisków
Author: J-23
Date: Sun, 25 Aug 2013 21:56
Date: Sun, 25 Aug 2013 21:56
55 lines
2983 bytes
2983 bytes
W dniu 24.08.2013 16:45, Borneq pisze:
> Chcę napisać przykładowy kalkulator, ale nie zwykły, którego źródła
> można spotkać w książkach do programowania. Kalkulator będzie miał wiele
> trybów, naciśnięcie klawisza shift na przykład spowoduje że klawisze
> przybiorą inne teksty.
> Chciałem zrobić to tak, że klawiasze będą miały różne tagi: 0,1,2,3,4...
> Dodatkowo będą rózne kody operacji jak
> BTN_INV
> BTN_FRACT
> BTN_LOG
> BTN_10_x
> BTN_LN
> BTN_e_x
> Mają być tablice konfiguracji: Jedna to klawisze bez shifta:
> BTN_INV
> BTN_LOG
> BTN_LN
> A driuga klawiasze z schiftem
> BTN_FRACT
> BTN_10_x
> BTN_e_x
>
> Naciskam klawisz, odczutuję jego tag, patrzę w tablicy i odczytuję kod.
> Ale w JButton nie mam tagów a jedynie rozróżnianie po nazwie:
> Przykład
> http://examples.javacodegeeks.com/desktop-java/swing/jbutton/handle-action-events-for-jbutton/
>
>
> JButton button1 = new JButton("Yes");
> JButton button2 = new JButton("No");
>
> //set action listeners for buttons
> button1.addActionListener(this);
> button2.addActionListener(this);
>
> //add buttons to the frame
> add(button1);
> add(button2);A potem rozróznianie public void
> actionPerformed(ActionEvent ae) {
> String action = ae.getActionCommand();
> if (action.equals("Yes")) {
> System.out.println("Yes Button pressed!");
> }
> else if (action.equals("No")) {
> System.out.println("No Button pressed!");
> }
> }Nie za bardzo mi się to podoba, po klawisz moze miec rózny tekst w
> zależnośc od akcji, natomiast moze być kilka klawiaszyz tym samym
> tekstem, na przykład pustym.Jak to rozwiązać?
Nie znam Swing co prawda ale wydaje mi się nic prostrzego do robic Tag :)
Dziedzicz po klasie JButton i jazda do przodu
Pozdrawiam
Re: Rozróżnianie przycisków
Author: Borneq
Date: Mon, 26 Aug 2013 00:06
Date: Mon, 26 Aug 2013 00:06
14 lines
1531 bytes
1531 bytes
Użytkownik "J-23" <baczeklu@o2.pl> napisał w wiadomości news:kvdv7p$6v6$1@mx1.internetia.pl... > Nie znam Swing co prawda ale wydaje mi się nic prostrzego do robic Tag :) > > Dziedzicz po klasie JButton i jazda do przodu Tak, ale jest jedna rzecz, aby w actionPerformed(ActionEvent e) chciało być zwrócone przez e.getActionCommand(). Nie chciałem aby to był tekst na buttonie, ale wystarczy: ----------------------------> setActionCommand <------------- np: buttons[i].setActionCommand(Integer.toString(i)); wtedy tagiem będzie stringowa postać lliczby Pozdrawiam
Re: Rozróżnianie przycisków
Author: Arivald
Date: Mon, 26 Aug 2013 04:45
Date: Mon, 26 Aug 2013 04:45
84 lines
3821 bytes
3821 bytes
W dniu 2013-08-25 23:56, J-23 pisze:
> W dniu 24.08.2013 16:45, Borneq pisze:
>> Chcę napisać przykładowy kalkulator, ale nie zwykły, którego źródła
>> można spotkać w książkach do programowania. Kalkulator będzie miał wiele
>> trybów, naciśnięcie klawisza shift na przykład spowoduje że klawisze
>> przybiorą inne teksty.
>> Chciałem zrobić to tak, że klawiasze będą miały różne tagi: 0,1,2,3,4...
>> Dodatkowo będą rózne kody operacji jak
>> BTN_INV
>> BTN_FRACT
>> BTN_LOG
>> BTN_10_x
>> BTN_LN
>> BTN_e_x
>> Mają być tablice konfiguracji: Jedna to klawisze bez shifta:
>> BTN_INV
>> BTN_LOG
>> BTN_LN
>> A driuga klawiasze z schiftem
>> BTN_FRACT
>> BTN_10_x
>> BTN_e_x
>>
>> Naciskam klawisz, odczutuję jego tag, patrzę w tablicy i odczytuję kod.
>> Ale w JButton nie mam tagów a jedynie rozróżnianie po nazwie:
>> Przykład
>> http://examples.javacodegeeks.com/desktop-java/swing/jbutton/handle-action-events-for-jbutton/
>>
>>
>>
>> JButton button1 = new JButton("Yes");
>> JButton button2 = new JButton("No");
>>
>> //set action listeners for buttons
>> button1.addActionListener(this);
>> button2.addActionListener(this);
>>
>> //add buttons to the frame
>> add(button1);
>> add(button2);A potem rozróznianie public void
>> actionPerformed(ActionEvent ae) {
>> String action = ae.getActionCommand();
>> if (action.equals("Yes")) {
>> System.out.println("Yes Button pressed!");
>> }
>> else if (action.equals("No")) {
>> System.out.println("No Button pressed!");
>> }
>> }Nie za bardzo mi się to podoba, po klawisz moze miec rózny tekst w
>> zależnośc od akcji, natomiast moze być kilka klawiaszyz tym samym
>> tekstem, na przykład pustym.Jak to rozwiązać?
>
> Nie znam Swing co prawda ale wydaje mi się nic prostrzego do robic Tag :)
>
> Dziedzicz po klasie JButton i jazda do przodu
>
> Pozdrawiam
>
... ale czemu przenosić złą praktykę z Delphi do Javy?
do OP:
Dla JButton ustw string komendy:
button.setActionCommand("command");
Będzie on niezależny od tekstu, i to jego używasz w actionPerformed().
BTW jest tyle tutoriali w necie, czemu nie poczytasz?
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.
Przyzwyczaj się że to nie Delphi, tu się tworzy wiele współdziałających
klas.
--
Arivald
Re: Rozróżnianie przycisków
Author: Borneq
Date: Mon, 26 Aug 2013 05:16
Date: Mon, 26 Aug 2013 05:16
16 lines
1832 bytes
1832 bytes
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ę?
Re: Rozróżnianie przycisków
Author: 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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads