Sò che è già stato chiesto molte volte qualcosa di simile, ma non ho mai trovato esattamente quello che serve a me, e non riesco a risolvere il mio problema con gli altri topic...
Ho un JPanel layoutato con BorderLayout.
Alla posizione Center ho uno ScrollPane che include un JPanel. Il JPanel ha un GridLayout ed ogni riga è un JLabel.
Alla posizione South ho una JTextField.
La questione è: io scrivo nella JTextField, premo invio (dopo aver implementato l'ActionListener), e voglio che il mio messaggio compaia IN TEMPO REALE nell'ultima JLabel di quelle sopra descritte.
Ho provato ad inserire nell'ActionListener il repaint di tutte e tre le componenti a cascata che sto utilizzando: JPanel con JLabel, JPanel di posizione CENTER, JFrame principale.
Il codice non dà problemi, ma nella pratica non mi viene aggiornato il JPanel con il messaggio che voglio... Devo chiudere e riaprire il frame per vederlo... Qualche buon consiglio?
In base a quello che ho scritto non credo sia indispensabile il codice per dare una risposta, ma metto uno stralcio:
codice:
public class Applicazione extends Finestra
{
// VARIABILI VARIE
public Applicazione ()
{
bachecaMessaggi = new JPanel ();
bachecaMessaggi.setLayout (new GridLayout (25, 0));
listaM [] = new JLabel [25]
// CARICO LE JLABEL E RIEMPIO IL VETTORE listaM
for (int y = 0; y<listaM.length; y++)
{
bachecaMessaggi.add (listaM [y]);
}
JScrollPane centralPane = new JScrollPane (bachecaMessaggi);
centralPanel = new JPanel ()
info = new JTextField ("Scrivi");
centralPanel.add (centralPane, BorderLayout.CENTER);
centralPanel.add (info, BorderLayout.SOUTH);
frame = new JFrame ();
frame.getContentPane ().add (centralPanel, BorderLayout.CENTER);
info.addActionListener (new ActionListener ()
{
public void actionPerformed (ActionEvent e)
{
if (info.getText ().equals (""))
{
// AVVISO DI ERRORE
}
else
{
info.setText ("");
bachecaMessaggi.validate ();
bachecaMessaggi.repaint ();
centralPanel.validate ();
centralPanel.repaint ();
frame.validate ();
frame.repaint ();
}
}
});
}
}
Date per buono che non ci siano errori di sintassi (l'ho riscritto velocemente per farvi capire), come posso ottenere il mio desiderato effetto REFRESH tramite l'ActionListener???