Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [java] Eventi ActionListener ActionPerformed su pulsanti non funzionanti

    Ciao a tutti, ho scritto una classe che tramite un'interfaccia deve prendere in input 2 stringhe passarle ad metodo che le elabora e poi fornisce un output nella stessa interfaccia.
    Ora, vorrei far partire l'acquisizione quando l'utente schiaccia un pulsante e che lo stesso abbia la possibilità di resettare il form.
    A tal proposito ho scritto:
    codice:
    public class InputForm extends JFrame  implements ActionListener{ 
    
    JTextField input_text;
    JTextField input_text2;
    JButton reset_button;
    JButton catch_button;
    
    /* ... disposizione interfaccia ...*/
    
        buildConstraints(constraints,1,2,1,1,0,0);
        constraints.fill = GridBagConstraints.NONE;
        constraints.anchor = GridBagConstraints.WEST;
        JButton reset_button = new JButton("Reset");
        reset_button.setToolTipText("Resetta il form") ;
        reset_button.addActionListener(this);
        griglia.setConstraints(reset_button, constraints);
        panel.add(reset_button);
    
    /* e così anche l'altro pulsante. Poi ridefinisco ActionPerformed */
    
    public void actionPerformed(ActionEvent evt){
        Object src = evt.getSource();
        if (src == reset_button){
            input_text.setText("");
    		/*altro*/
        }
        else {
    		/*altro*/}
            
        }
    Il problema è che quando schiaccio i pulsanti dell'interfaccia sembra che il programma sotto "non senta"

    In più nella finestra di debug vedo un ' errore con input_text nullpointer.

    cosa sbaglio?

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    sembrerebbe che non hai iniziliazzato il jtextfield. L'hai fatto da qualche parte input_text=new JTextField() e poi aggiunto al pannello?

    hai provato a farti stampare qualche stringa per vedere se entra nell'if o nell'actionlistener?

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    c'è pure dell'altro...

    è "sbagliato" testare l'uguaglianza tra oggetti con ==

    Dovresti fare

    codice:
    src = (JButton)evt.getSource;
    if (src.equals(reset_button)) {
    ...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Ho modificato così, ma...

    codice:
    public void actionPerformed(ActionEvent evt){
        JButton src =(JButton) evt.getSource();
        if (src.equals(reset_button)){
            input_text.setText("");
    
        }
        else ...
        
    }
    Ho istanziato anche il JtextField. Nel libro che seguivo testavano l'oggetto con == !!!

    Comunque il problema non è risolto...i pulsanti dell'interfaccia continuano a "non sentire"!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    posta l'intera classe, con gli import.
    Saluti.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    In questo caso usare == o equals() è la stessa cosa, ma in generale, ad esempio per confrontare due stringhe, si usa equals().
    Metti qualche System.out.println("blabla") per vedere se almeno entra nell'action performed e poi nell'if.

  7. #7
    codice:
    import	java.io.*;
    import	java.awt.*;
    import	java.awt.event.*;
    import	javax.swing.*;
    import	java.lang.*;
    
    public class InputForm extends JFrame  implements ActionListener{ 
     
    
    /* dichiarazione variabili interfaccia grafica */
    JTextField input_text;
    JTextField input_pattern;
    JButton reset_button;
    JButton _button;
    
    public static void main(String[] args) {   
         InputForm frame = new InputForm();
    }
    
    public InputForm() { 
        super("Inserire l'input:");
        
    
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        GridBagLayout griglia = new GridBagLayout();
        GridBagConstraints constraints = new GridBagConstraints();
        JPanel panel = new JPanel();
        panel.setLayout(griglia);
        
        //Label Pattern
        buildConstraints(constraints,0,0,1,1,0,0);
        constraints.fill = GridBagConstraints.NONE;
        constraints.anchor = GridBagConstraints.EAST;
        JLabel label_pattern = new JLabel("Input Pattern:  ",JLabel.LEFT);
        griglia.setConstraints(label_pattern, constraints);
        panel.add(label_pattern);
        
        //Input Text Pattern
        buildConstraints(constraints,1,0,2,1,0,0);
        constraints.fill = GridBagConstraints.HORIZONTAL;
        JTextField input_pattern = new JTextField();
        //input_pattern.setToolTipText("freeee");
        griglia.setConstraints(input_pattern, constraints);
        panel.add(input_pattern);
        
        //Label Testo
        buildConstraints(constraints,0,1,1,1,0,0);
        constraints.fill = GridBagConstraints.NONE;
        constraints.anchor = GridBagConstraints.EAST;
        JLabel label_text = new JLabel("Input Text:  ",JLabel.LEFT);
        griglia.setConstraints(label_text, constraints);
        panel.add(label_text);
        
        //Input Testo
        buildConstraints(constraints,1,1,2,1,0,0);
        constraints.fill = GridBagConstraints.BOTH;
        JTextField input_text = new JTextField();
        constraints.insets = new Insets(10,0,0,0); // distanzia gli elementi
        griglia.setConstraints(input_text, constraints);
        panel.add(input_text);
        
        //Pulsante 
        buildConstraints(constraints,2,2,1,1,0,0);
        constraints.fill = GridBagConstraints.BOTH;
        constraints.anchor = GridBagConstraints.EAST;
        JButton _button = new JButton("Esegui");
        
        _button.addActionListener(this);
        griglia.setConstraints(_button, constraints);
        panel.add(_button);
        
        
        //Pulsante Reset
        buildConstraints(constraints,1,2,1,1,0,0);
        constraints.fill = GridBagConstraints.NONE;
        constraints.anchor = GridBagConstraints.WEST;
        JButton reset_button = new JButton("Reset");
        reset_button.setToolTipText("Resetta il form") ;
        reset_button.addActionListener(this);
        griglia.setConstraints(reset_button, constraints);
        panel.add(reset_button);
        
        setContentPane(panel);
        setVisible(true);
    }
    
    void buildConstraints(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy){
        gbc.gridx = gx;
        gbc.gridy = gy;
        gbc.gridwidth = gw;
        gbc.gridheight = gh;
        gbc.weightx = wx;
        gbc.weighty = wx;
    }
    
    public void actionPerformed(ActionEvent evt){
        JButton src =(JButton) evt.getSource();
        if (src.equals(_button)){
            /**/    }
    
        else if (src.equals(reset_button))
            input_text.setText("");
        
    }
    
    
    } /* fine classe */
    ecco a voi... nel frattempo vi ringrazio per la disponibilità...

    mettere dei out.print? e dove stampano? ...scusa l'ignoranza

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Non ridichiarare JButton reset_button = Qualcosa...

    Non così:
    codice:
    JButton reset_button = new JButton("Reset");
    Ma così:
    codice:
    reset_button = new JButton("Reset");
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    All'interno del costruttore, quando definisci i vari campi e bottoni, devi usare le variabili globali.

    JTextField input_text = new JTextField();
    JButton _button = new JButton("Esegui");
    JButton reset_button = new JButton("Reset");
    ecc.

    tu fai così, quindi non usi quelle globali ma alcune create localmente. All'interno dell'action listener, invece fai il confronto tra quella che a generato l'evento e quella locale (che sarà sempre null). Risolvi definendo ogni campo e bottone non come hai fatto tu ma così

    input_text = new JTextField();
    _button = new JButton("Esegui");
    reset_button = new JButton("Reset");
    ecc.


    senza mettere il tipo prima del nome della variabile.

    Ciao

    EDIT: Abbiamo risposto quasi contemporaneamente, scusa non avevo visto :P

  10. #10
    che sbadato...ora provo e vi sò dire!!!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.