Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: KeyListener

Aktivity
Avatar
Tomhaus
Člen
Avatar
Tomhaus:18.12.2014 11:52

Čau, lidi. Potřeboval bych vědět jak můžu přidat KeyListener celé aplikaci, ale výstup z KeyListeneru chci jen do jednoho componentu, kterej sem si vytvořil.

Když sem přidal Keylistener do hlavní třídy, tak to nic nedělalo a když jsem si vytvořil novej JPanel, do kterýho sem vložil všechny komponenty, a přidal jsem mu KeyListener, tak to taky nedělalo nic.

Už mi došli nápady, jak by se to dalo řešit, tak jsem napsal sem.

Díky za každou radu.

Odpovědět
18.12.2014 11:52
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:18.12.2014 17:37

Prosím odpovíte někdo?

Nahoru Odpovědět
18.12.2014 17:37
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
mara
Člen
Avatar
Odpovídá na Tomhaus
mara:18.12.2014 17:58

prosimtě ukaž zdrojový kód, jak to zatím máš.

Nahoru Odpovědět
18.12.2014 17:58
Co na srdci, to na Facebooku
Avatar
mara
Člen
Avatar
mara:18.12.2014 18:11

Ahoj mohlo by to být třeba takto :

 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication9;

import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class JavaApplication9 {
    public static JLabel lab;
    public static String s = "";
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(640, 480));
        frame.setFocusable(true);
        lab = new JLabel();
        frame.add(lab);
        frame.addKeyListener(new KeyListener(){

            @Override
            public void keyTyped(KeyEvent e) {
                System.out.println("zmackl jsi tlacitko" + e.getKeyChar());
                s += String.valueOf(e.getKeyChar()).toString();
                lab.setText(s);
            }

            @Override
            public void keyPressed(KeyEvent e) {
                System.out.println("zmackl jsi tlacitko");
            }

            @Override
            public void keyReleased(KeyEvent e) {
                System.out.println("pustil jsi klavesu" + e.getKeyChar());
            }

        });
        frame.pack();




        // TODO code application logic here
    }
}

snad to pomůže
EDIT: Tomhaus zapomněl jsem ti dát odpovědět

Editováno 18.12.2014 18:12
Nahoru Odpovědět
18.12.2014 18:11
Co na srdci, to na Facebooku
Avatar
Tomhaus
Člen
Avatar
Tomhaus:18.12.2014 18:12

Asi nějak takhle:
Hlavní třída:

public class Frame extends JFrame {
  private GridBagConstraints g;
  private Screen s;

  private JPanel pan01;

  public Frame(){
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setTitle("Násobení matic");
   setResizable(false);
   addKeyListener(new Key());

   init();
  }

  public void init(){
   setLayout(new GridBagLayout());
   g = new GridBagConstraints();

   s = new Screen(); //moje vlastní třída
   g.gridx = 1;
   g.gridy = 0;
   add(s, g);

   pan01 = new JPanel(); //do tohohlepanelu mam přidaný ještě jiný komponenty, ale to není důležitý
   g.gridx = 0;
   g.gridy = 0;
   add(pan01, g);

   pack();

   setLocationRelativeTo(null);
   setVisible(true);
  }

  private class Key implements KeyListener {
    public void keyPressed(KeyEvent arg0) {
        System.out.println("PRESSED");
    }

    @Override
    public void keyReleased(KeyEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void keyTyped(KeyEvent arg0) {
        // TODO Auto-generated method stub

    }
  }

  public static void main(String[] args){
        new Frame();
  }

}

podle mě to mam dobře, ale přesto mi to při zmáčknutí jakýhokoli tlačítka nic nevypisuje.

Editováno 18.12.2014 18:15
Nahoru Odpovědět
18.12.2014 18:12
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
mara
Člen
Avatar
Odpovídá na Tomhaus
mara:18.12.2014 18:18

Nenastavil jsi mu focusable na true

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
18.12.2014 18:18
Co na srdci, to na Facebooku
Avatar
Tomhaus
Člen
Avatar
Odpovídá na mara
Tomhaus:18.12.2014 18:22

Díky moc :)

Nahoru Odpovědět
18.12.2014 18:22
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na mara
Tomhaus:18.12.2014 18:27

No jo, ale když kliknu na nějaký tlačítko v tom panelu, tak to zase nefunguje.
Focusable je nastavenej v Frame, takže ho mam přidat do každýho tlačítka, aby se po zmáčknutí nejprve provedl úkon a pak se tlačítko jakoby "odkliklo" (aby okolo něj nebyl ten rámeček)?

Editováno 18.12.2014 18:27
Nahoru Odpovědět
18.12.2014 18:27
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
mara
Člen
Avatar
Odpovídá na Tomhaus
mara:18.12.2014 18:27

Není zač :)

Nahoru Odpovědět
18.12.2014 18:27
Co na srdci, to na Facebooku
Avatar
mara
Člen
Avatar
mara:18.12.2014 18:32

Nevím, jak se to dá udělat nějak lepší, ale zkus všem komponentům přidat fucusable a ten keyListener.

Nahoru Odpovědět
18.12.2014 18:32
Co na srdci, to na Facebooku
Avatar
Tomhaus
Člen
Avatar
Odpovídá na mara
Tomhaus:18.12.2014 18:36

já bych řekl, že když přidam tlačítku focusable do ActionListeneru, tak se po zmáčknutí tlačítka to tlačítko jakoby odrámečkuje a že KeyListener přídávat všem komponentám není potřeba

Nahoru Odpovědět
18.12.2014 18:36
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
mara
Člen
Avatar
Odpovídá na Tomhaus
mara:18.12.2014 18:37

Tak to zkus a uvidíš.

Nahoru Odpovědět
18.12.2014 18:37
Co na srdci, to na Facebooku
Avatar
Tomhaus
Člen
Avatar
Odpovídá na mara
Tomhaus:18.12.2014 18:39

No asi to zkusim tak jak říkáš, protože mě to jen s Focusablem nejde :)

Nahoru Odpovědět
18.12.2014 18:39
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na mara
Tomhaus:18.12.2014 19:50

mam ještě jeden dotaz a nechce se mi zakládat novou diskuzi:

když mam pole o velikosti, která se mění s jinou hodnotou, a mam v něm uložený čísla (jakýkoli, třeba do 5ti). A já potřebuju podmínku, aby se nespustila jedna metoda, když se jakýkoli číslo z toho pole bude rovnat třeba 2. Když vytořim for loop

for(int i = 0; i < pole.lenght; i++){
if(pole[i] != 2){ udelejNeco();}
}

tak se mi ta metoda provede jen pro ty hodnoty pole, které se nerovnají 2.

Poradíte někdo?

Nahoru Odpovědět
18.12.2014 19:50
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Odpovídá na Tomhaus
Lukáš Křehula:18.12.2014 19:54

Jestli jsem tě dobře pochopil, tak tohle by ti mělo pomoct:

continue;

Skočí zpět na cyklus.

 
Nahoru Odpovědět
18.12.2014 19:54
Avatar
mara
Člen
Avatar
mara:18.12.2014 20:15

Zkus třeba toto:

public static void main(String[] args) {
    int[] poleint = new int[5];
    poleint[0] = 4;
    poleint[1] = 2;
    poleint[2] = 1;
    poleint[3] = 5;
    poleint[4] = 8;
    for(int i : poleint){
        if (i == 2){
            metoda();
        }
    }
}

EDIT: Tomhaus promin vzdycky zapomenu dát odpovědět

Editováno 18.12.2014 20:17
Nahoru Odpovědět
18.12.2014 20:15
Co na srdci, to na Facebooku
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Lukáš Křehula
Tomhaus:18.12.2014 20:16

já, ale potřebuju: Když se bude jakýkoli číslo z toho pole rovnat třeba číslu 2, tak aby se nespustila jiná metoda (pracuje s těmi čísli v poli) pro všechny čísla v tom poli.

Nahoru Odpovědět
18.12.2014 20:16
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na mara
Tomhaus:18.12.2014 20:17

To by (asi) šlo :) zkusim to hned

Nahoru Odpovědět
18.12.2014 20:17
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
mara
Člen
Avatar
mara:18.12.2014 20:20

tak co třeba toto :

public static void main(String[] args) {
    boolean podminka = true;
    int[] poleint = new int[5];
    poleint[0] = 4;
    poleint[1] = 2;
    poleint[2] = 1;
    poleint[3] = 5;
    poleint[4] = 8;
    for(int i : poleint){
        if (i == 2){
            podminka = false;
        }
    }
    if(podminka == true){
        metoda()
    }
}
Nahoru Odpovědět
18.12.2014 20:20
Co na srdci, to na Facebooku
Avatar
mara
Člen
Avatar
mara:18.12.2014 20:22

Nějak to furt nechápu zkus to prosím trochu líp popsat, ať zbytečně nevypisuji spoustu kódu, který ti je k ničemu.

Nahoru Odpovědět
18.12.2014 20:22
Co na srdci, to na Facebooku
Avatar
Tomhaus
Člen
Avatar
Odpovídá na mara
Tomhaus:18.12.2014 20:31

ještě sem zapomněl dodat, že to pole je tvořený z jiné třídy, kde mam getter getValue()
A ten getter se rovná tomu číslu na té pozici.

Trošku sem se v tom zamotal, tak nevim.

Nahoru Odpovědět
18.12.2014 20:31
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
mara
Člen
Avatar
Odpovídá na Tomhaus
mara:18.12.2014 20:36

Prosimtě zkus mně prosím trochu popsat, co v jakých třídách máš a co potřebuješ, aby to dělalo. Teď vůbec nevím. Nebo dej mi sem celý kód, a já se ti ho pokusím upravít.

Nahoru Odpovědět
18.12.2014 20:36
Co na srdci, to na Facebooku
Avatar
Tomhaus
Člen
Avatar
Odpovídá na mara
Tomhaus:18.12.2014 20:46

přidam kód:
třída GNumbers:

public class GNumbers {
        private int xCoor, yCoor, value;

        public GNumbers(int xCoor, int yCoor, int value){
                this.xCoor = xCoor;
                this.yCoor = yCoor;
                this.value = value;
        }

        public int getxCoor() {
                return xCoor;
        }

        public void setxCoor(int xCoor) {
                this.xCoor = xCoor;
        }

        public int getyCoor() {
                return yCoor;
        }

        public void setyCoor(int yCoor) {
                this.yCoor = yCoor;
        }

        public int getValue() {
                return value;
        }

        public void setValue(int value) {
                this.value = value;
        }
}

pak sem tuhle třídu vložil do pole:

private GNumbers[] ucoors;

jinde to pole nastavim:

ucoors = new GNumbers[a];

,kde to a je ta měnící se velikost pole

pak mam arraylist té třídy GNumbers:

private final ArrayList<GNumbers> uvalues = new ArrayList<GNumbers>();

a tam, kde sem to pole nastavil, taky přidávam pozicím v poli ty hodnoty v tom arraylistu:

int index = 0;
                for(int i = 0; i < a; i++){
                        ucoors[i] = uvalues.get(index);
                        index++;
                }

Tak snad vám to stačí :D

Jinak tu otázku máte někde nad tímto příspěvkem :D

Editováno 18.12.2014 20:48
Nahoru Odpovědět
18.12.2014 20:46
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:19.12.2014 13:34

Pomůže prosím někdo?

Nahoru Odpovědět
19.12.2014 13:34
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:19.12.2014 15:33

Přišel jsem na to sice nezvyklým způsobem, ale mam, co jsem potřeboval. :D

Nahoru Odpovědět
19.12.2014 15:33
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 25 zpráv z 25.