|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2008
Città: Brindisi
Messaggi: 3359
|
Problema evento in Java (novello)
salve a tutti!
sto facendo una full immersion di java, sono arrivato a gestire gli eventi con le interfacce grafiche ma ho un problemi che non capisco. Codice:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*; //bisogna importare la classe
public class MyFrame extends JFrame implements ActionListener
{
JTextField prima; //le definisco nella classe in modo tale da essere visibili per tutti i metodi
JTextField seconda;
public MyFrame()
{
super("Inverti la tua Scritta!");
Container areaCentrale = getContentPane();
ascoltafinestra fin = new ascoltafinestra();
addWindowListener(fin); //non si definisce l'oggetto che esegue l'evento perchè è sottinteso riguardi la finestra
areaCentrale.setLayout(new FlowLayout());
JTextField prima = new JTextField(15); //creo una casella di testo che rende visibili 15 caratteri
JTextField seconda = new JTextField(15);
seconda.setEditable(false); //impostiamo la seconda casella come non modificabile
areaCentrale.add(prima);
areaCentrale.add(Box.createRigidArea(new Dimension(15,0)));
areaCentrale.add(seconda);
prima.addActionListener(this);//identifico l'evento derivante dalla casella prima di questa finestra
pack();//al posto del set size si può utilizzare questa funzione per impostare le dimensioni della finestra automaticamente in modo da rendere gli oggetti visibili
// si inserisce alla fine della definizione degli oggetti nella finestra
}
public void actionPerformed(ActionEvent e)
{
String iniziale = prima.getText(); //inserisco il testo nella stringa iniziale
String finale = capovolgi2(iniziale);
seconda.setText(finale);//la stringa capovolta la inserisco nella seconda casella
}
public String capovolgi(String iniziale)
{
String b = "";
for (int i= iniziale.length(); i==1 ; i--){
iniziale = iniziale.substring(i-1,i);
b = b + iniziale;
}
return b ;
}
public String capovolgi2(String iniziale){
String reverse = new StringBuffer(iniziale).reverse().toString();
return reverse;
}
}
Codice:
String iniziale = prima.getText();
__________________
CPU:q6600 @ 3.0ghz case :apevia x-cruiser neroALI |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 3808
|
che errore ?
Sei sicuro di aver letto la documentazione per la classe e il metodo del caso ? http://docs.oracle.com/javase/7/docs...#getText%28%29 Quando ponete un problema descrivetelo, che non abbiamo i poteri telecinetici per entrarvi nella testa, non ancora almeno . |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2008
Città: Brindisi
Messaggi: 3359
|
si, scusami ho dimenticato un copia e incolla
Codice:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at MyFrame.actionPerformed(MyFrame.java:37) at javax.swing.JTextField.fireActionPerformed(JTextField.java:508) at javax.swing.JTextField.postActionEvent(JTextField.java:721) at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:836) at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1663) at javax.swing.JComponent.processKeyBinding(JComponent.java:2879) la console mi riporta l'errore sulla stringa 37, ovvero quella situata nel metodo actionPerformed che estrae la stringa dalla prima casella di testo.
__________________
CPU:q6600 @ 3.0ghz case :apevia x-cruiser neroALI |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 3808
|
Quote:
non puoi usare getText() come una semplice funzione che ritorni un valore e fare una assegnazione del genere "sulla fiducia", leggi bene la documentazione. |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Semplicemente hai dichiarato la variabile "prima" come variabile d'istanza, per renderla visibile anche nel metodo actionPerformed ma poi, al momento di inizializzarla (nel costruttore MyFrame), l'hai ridichiarata creando quindi una variabile locale con lo stesso nome e che ovviamente al termine dell'esecuzione del costruttore perdi. La tua variabile d'istanza non ha quindi mai assunto il valore che ti aspettavi ed ha mantenuto il valore di default, cioè null.
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Aug 2008
Città: Brindisi
Messaggi: 3359
|
Codice:
public String getText()
Returns the text contained in this TextComponent. If the underlying document is null, will give a NullPointerException. Note that text is not a bound property, so no PropertyChangeEvent is fired when it changes. To listen for changes to the text, use DocumentListener.
Returns:
the text
Throws:
NullPointerException - if the document is null
l'oggetto JTextField comunque restituisce una stringa, quindi i problemi di incompatibilità di variabile penso siano da scartare.
__________________
CPU:q6600 @ 3.0ghz case :apevia x-cruiser neroALI |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Aug 2008
Città: Brindisi
Messaggi: 3359
|
Quote:
ma se non le dichiaro come variabili locali mi inizia a dare errori ovunque nel costrurre MyFrame perchè quelle due textbox le specifico nel layout
__________________
CPU:q6600 @ 3.0ghz case :apevia x-cruiser neroALI |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Aug 2008
Città: Brindisi
Messaggi: 3359
|
Risolto!
(mi scuso per il triplo messaggio) le due variabili locali le ho dovute istanziare come oggetti per intero. Ora funziona! Grazie ragazzi!
__________________
CPU:q6600 @ 3.0ghz case :apevia x-cruiser neroALI |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 3808
|
Quote:
la classe - o il tipo - JTextField restituisce una stringa se il campo del testo non è vuoto, in caso contrario genera una eccezione, non puoi usare quel metodo con un assegnazione del genere . O usi quel genere di assegnazione in una porzione di codice dove sai a priori che nel 100% dei casi il campo testo sarà non nullo, o devi gestire l'eventualità di una eccezione generata da quel metodo, non hai molte alternative, e quello che fanno gli altri è spesso sbagliato e conta poco . |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:34.




















