🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
6 messages
6 total messages Started by Borneq Sat, 24 Aug 2013 14:45
Rozróżnianie przycisków
#153829
Author: Borneq
Date: Sat, 24 Aug 2013 14:45
47 lines
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
#153830
Author: J-23
Date: Sun, 25 Aug 2013 21:56
55 lines
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
#153831
Author: Borneq
Date: Mon, 26 Aug 2013 00:06
14 lines
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
#153832
Author: Arivald
Date: Mon, 26 Aug 2013 04:45
84 lines
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
#153833
Author: Borneq
Date: Mon, 26 Aug 2013 05:16
16 lines
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
#153834
Author: 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
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