Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Gestione eventi pressione tasti da tastiera

    Salve ragazzi, io ho un metodo di una classe, in cui vorrei poter far inserire all'utente dei valori (a,b) manualmente fino a che non viene premuto il tasto q.
    il codice è:
    codice:
     
    public int[] x_zInseriti(int m, int n) {
             int[] x = new int[n * m];
             ArrayList<Integer> indici = new ArrayList<>();
             JOptionPane.showMessageDialog(null, "Inserire le coordinate (a,b) dei valori che devono essere messi a 1. Premere q dopo l'ultima coordinata inserita.");
             do {
                 int a = Integer.parseInt(JOptionPane.showInputDialog(null, "Inserisci l'ascissa della coordinata del punto:"));
                 int b = Integer.parseInt(JOptionPane.showInputDialog(null, "Inserisci l'ascissa della coordinata del punto:"));
                 int z = a + n * b;
                 indici.add(z);
             } while (/*controllo sulla pressione del tasto q*/);
             return x;
         }
    Non riesco proprio a capire come posso fare un controllo sulla pressione del tasto q..devo creare un nuovo metodo ascoltatore?
    Qualcuno può aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    Devi avere per prima cosa un interfaccia swing e poi devi implementare un KeyListener. Siccome è molto lungo da scrivere ti linko una documentazione che mi sembra abbastanza buona.
    http://docs.oracle.com/javase/tutori...ylistener.html

  3. #3
    Ti ringrazio, per la risposta, cmq data la difficoltà della cosa e il mio poco tempo rimasto, credo che farò in maniera diversa, perchè ho provato a implementare un KeyListener ma evidentemente sbaglio qualcosa e in realtà non ho capito molto di come fare..
    ho risolto un pò spartanamente inserendo da tastiera il numero delle coppie e inserisco quest'ultime ciclando un for.
    Adesso ho un problema che non capisco proprio:
    codice:
                
    do{
                 risp = String.valueOf(JOptionPane.showInputDialog(null, "Vuoi inserire le coordinate dei punti della griglia manualmente? S/N"));
                 if((risp.equals("s") == false)||(risp.equals("n") == false)){
                     JOptionPane.showMessageDialog(null,"Errore! Digitare 's' (senza virgolette) se vuoi inserire manualmente le coordinate dei punti oppure 'n' (senza virgolette) se vuoi generare una griglia di punti a valori casuali.");
                 }
                 }while((!risp.equals("s"))||(!risp.equals("n")));
    in questa parte di codice chiedo all'utente di fare una scelta e se viene inserito un valore diverso da "s" o da "n" mi stampa il messaggio di errore e mi permette di inserire nuovamente una delle sue possibili risposte, però anche se inserisco "s" o "n" (senza virgolette) và in loop continuando a stamparmi il messaggio e permettendomi di re-inserire..
    Come posso fare per risolvere questo problema?
    Premetto che con dei valori interi, ho fatto più o meno la stessa cosa e funziona perfettamente.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    L'errore è l'aver usato l'operatore OR invece di AND, devi sostituire "||" con "&&" in entrambe le occorrenze (if e do/while)

    A parte questo però richiedere una scelta si/no con una immissione di testo è sbagliato concettualmente per una GUI, dovresti usare:

    codice:
    int risp = JOptionPane.showConfirmDialog(null, "Vuoi inserire le coordinate dei punti della griglia manualmente?", "Titolo", 
    JOptionPane.YES_NO_OPTION);
    Ciao.

  5. #5
    Grazie mille.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.