Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di izzusan
    Registrato dal
    Apr 2003
    Messaggi
    463

    [java] problema jtextField

    ciao ragazzi ho un problema che sembra banale ma nn riesco a risolvere in nessun modo!
    io devo impostare alla mia textField la dimensione di una lettera, cioe' quando scrivo all'interno mi deve scrivere solo una lettera.

    ho provato con jTextField cella1 = new jTextField (1)
    e non va ho provato con

    cella1.setColumns(1)

    e non va continua a scrivermi mille lettere!!!

    come posso fare ??? help sto sclerando!!!!!

    grazie a tutti bye

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Costruisci un KeyListener per quella JTextField che, ad ogni pressione dei tasti, controlla se il contenuto della JTextField è di lunghezza pari a 1.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di izzusan
    Registrato dal
    Apr 2003
    Messaggi
    463
    ?? scusa e sarebbe??
    ma come mai non mi accetta quei parametri??
    è strano che se la imposti a 1 contina a scriverti mille lettere . . . uffi uffa

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Impostare a 1 nel costruttore non significa dire alla JTextField che deve prendere 1 solo carattere ma che essa deve essere visualizzata di lunghezza 1 a video (dove il LayoutManager non interviene autonomamente).


    Come aggiungere un KeyListener che faccia al caso tuo:
    codice:
    tuaTextField.addKeyListener( new KeyAdapter() {
       public void keyTyped(KeyEvent ke) {
          String s = ((JTextField) ke.getSource()).getText();
          if (s.length() > 1) {
             ((JTextField) ke.getSource()).setText( s.substring(0,1) );
          }
       }
    });
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it L'avatar di izzusan
    Registrato dal
    Apr 2003
    Messaggi
    463
    caspita che casino
    mo provo l'ultima gentilezza . . . dove devo mettere questo codice?
    dove dichiaro la jtextField??

    grazie sei gentilissimo

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Subito dopo averla inizializzata.
    Quindi, subito dopo aver utilizzato l'istruzione new JTextField().


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it L'avatar di izzusan
    Registrato dal
    Apr 2003
    Messaggi
    463
    mi da errore sigh . . .

    sotto a jtextField text = new jtextField ();

    text.addKeyListener( new KeyAdapter()) {
    public void keyTyped(KeyEvent ke) {
    String s = ((JTextField) ke.getSource()).getText();
    if (s.length() > 1) {
    ((JTextField) ke.getSource()).setText( s.substring(0,1) );
    }
    }
    });

    sarebbe cosi??


    xro' mi da errore

  8. #8
    Utente di HTML.it L'avatar di izzusan
    Registrato dal
    Apr 2003
    Messaggi
    463
    uffi nn riesco proprio a farlo andare!

    praticamente e' un cruciverba dove le mie textField sono le caselline ma deve esserci solo una lettera x textField!
    vi metto un pezzo di codice che riguarda una singola cella

    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import javax.swing.text.*;

    public class Cruciverba extends JFrame{

    String risposte[][] = {
    {"C", "A", "R", " ", " ", "C", "R", "A", "B", " ", " ", "B", "A", "D", " "},
    {"A", "B", "E", "D", " ", "A", "U", "R", "A", " ", "B", "A", "B", "E", "L"},
    {"G", "A", "M", "E", " ", "G", "E", "A", "R", " ", "A", "R", "E", "N", "A"},
    {" ", "C", "O", "V", "E", "N", " ", "B", "E", "E", "N", " ", "L", "E", "G"},
    {" ", "A", "S", "I", "D", "E", " ", " ", " ", "G", "A", "B", " ", " ", " "},
    {" ", " ", " ", " ", "D", "Y", "A", "D", " ", "A", "L", "L", "A", "H", " "},
    {"C", "A", "C", "A", "O", " ", "B", "E", "A", "D", " ", "A", "D", "A", "M"},
    {"A", "M", "O", "K", " ", " ", "B", "I", "G", " ", " ", "D", "I", "K", "E"},
    {"B", "I", "D", "E", " ", "D", "A", "C", "E", " ", "B", "E", "T", "E", "L"},
    {" ", "D", "E", "L", "A", "Y", " ", "E", "S", "A", "U", " ", " ", " ", " "},
    {" ", " ", " ", "A", "R", "K", " ", " ", " ", "B", "R", "E", "A", "D", " "},
    {"J", "A", "G", " ", "D", "E", "A", "F", " ", "A", "P", "P", "L", "E", " "},
    {"A", "B", "O", "V", "O", " ", "B", "L", "O", "C", " ", "E", "L", "L", "S"},
    {"B", "U", "Y", "E", "R", " ", "B", "E", "A", "U", " ", "E", "A", "V", "E"},
    {" ", "T", "A", "T", " ", " ", "E", "A", "R", "S", " ", " ", "Y", "E", "A"}
    };


    JTextField cella1 = new JTextField(1);
    public JTextArea DomandeOrizzontali = new JTextArea(); // CREAZIONE DELLA CASELLA DELLE DOMANDE ORIZZONTALI
    public JTextArea DomandeVerticali = new JTextArea(); // CREAZIONE DELLA CASELLA DELLE DOMANDE VERTICALI

    /**
    costruzione del pannello
    @JPanel panel
    */
    JPanel panel1 = new JPanel(null); // CREAZIONE DEL PANNELLO

    JLabel orizzontale = new JLabel ();
    JLabel verticale = new JLabel ();
    JLabel titolo = new JLabel ();



    // set up GUI
    public Cruciverba(){
    super( "Cruciverba" );


    panel1.setLayout(null);

    titolo.setBounds(new Rectangle(200,10,100,50 ));
    titolo.setText("CRUCIVERBA");
    panel1.add(titolo, null);


    panel1.setBackground(new Color(195,255,78)); // COLORE DEL PANNELLO
    add(panel1);

    ControlloCruciverba listener = new ControlloCruciverba();




    cella1.setBounds(new Rectangle(40,80,20,20));
    cella1.setHorizontalAlignment(SwingConstants.CENTE R);
    cella1.setEditable(true);
    panel1.add(cella1,null);

    public static void main( String args[] ){
    Cruciverba application = new Cruciverba();
    application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    }

    public class ControlloCruciverba implements ActionListener {

    private Cruciverba cruci;

    public void ControlloCruciverba(Cruciverba cruci){
    this.cruci=cruci;
    }

    public void actionPerformed( ActionEvent event ){

    String comando = event.getActionCommand();
    if (comando.equals("soluzione")){

    cella1.setText(risposte[0][0]);
    cella2.setText(risposte[0][1]);
    cella3.setText(risposte[0][2]);
    }

    else if(comando.equals("controlla")){

    cella1.addKeyListener( new KeyAdapter() {
    public void keyTyped(KeyEvent ke) {
    String s = ((JTextField) ke.getSource()).getText();
    if (s.length() > 1) {
    ((JTextField) ke.getSource()).setText( s.substring(0,1) );
    }
    }
    });

    if(cella1.getText().equals(risposte[0][0])){
    cella1.setBackground(new Color(255,255,255));
    }
    else
    cella1.setBackground(new Color(255,0,0));


    if(cella2.getText().equals(risposte[0][1])){
    cella2.setBackground(new Color(255,255,255));
    }
    else
    cella2.setBackground(new Color(255,0,0));

    if(cella3.getText().equals(risposte[0][2])){
    cella3.setBackground(new Color(255,255,255));
    }
    else
    cella3.setBackground(new Color(255,0,0));

    }



    }

    } /// end private inner class TextFieldHandler

    }
    // end class JTabbedPaneDemo

    ecco il quanto

    ci sono poi 2 bottoni che uno fa la soluzione e l'altro controlla se la lettera che hai inserito e' giusta usando la matrice.
    il problema e' che nn rieso a settare il numero delle lettere!
    manca solo quello sigh sob!

  9. #9
    Utente di HTML.it L'avatar di izzusan
    Registrato dal
    Apr 2003
    Messaggi
    463
    RAGAZZI SON RIUSCITO A TROVARE IL MODO

    Bisogna fare una classe un file chiamato:JTextFieldLimit.java
    e scrivere il seguente codice:


    import javax.swing.text.*;
    //import javax.swing.text.*;
    public class JTextFieldLimit extends PlainDocument {
    private int limit;
    // optional uppercase conversion
    private boolean toUppoercase = false;

    JTextFieldLimit(int limit) {
    super();
    this.limit = limit;
    }

    JTextFieldLimit(int limit, boolean upper) {
    super();
    this.limit = limit;
    toUppoercase = upper;
    }

    public void insertString
    (int offset, String str, AttributeSet attr)
    throws BadLocationException {
    if (str == null) return;

    if ((getLength() + str.length()) <= limit) {
    if (toUppoercase) str = str.toUpperCase();
    super.insertString(offset, str, attr);
    }
    }
    }


    e poi richiamare la classe dove avete la vostra jTextField es :

    JTextField cella1 = new JTextField(1);
    cella1.setDocument(new JTextFieldLimit(1));

    il parametro passato sara' il numero di lettere che volete far inserire in questo caso 1

    ciao e grazie ancora

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.