Come si fa a... (JButton e JTextArea )

Stato
Discussione chiusa ad ulteriori risposte.

void

Utente Silver
9 Agosto 2008
10
5
0
63
Ciao ragazzi....
immaginate di avere un contenitore "c" con dentro due JTextArea (j1,e j2) e due JButton (scrivi,elimina)

aggiungo le JTextArea

c.add(new JScrollPane(j1));
c.add(new JScrollPane(j2));

al contenitore c... con "l'opzione" di creare anche le barre di scorrimento..

la funzione del tasto scrivi è quella di passare il testo (String testo) da j1 a j2 (eliminandolo da j2)

ecco i miei problemi:
1)quale metodo devo chimare (se esiste) per fare in modo che la barra di scorrimento verticale segua il testo (al riempimento della JTextArea j1) invece che rimpicciolirsi inesorabilmente e senza utilità??

2)come faccio a mettere in primo piano il tasto scrivi inmodo che quando clicco invio questo venga pigiato??


avete qualche metodo da consigliare??grazie a tutti :hail:
 
1)non capisco cosa intenti per "rimpicciolirsi inesorabilmente e senza utilità",spiegati meglio!
2)Mettere in primo piano il tasto è una cosa,eseguire delle operazioni alla pressione di invio è un'altra.Allora per il tasto invio dev utilizzare il giusto ascoltatore di eventi,in questo caso KeyListener e utilizzare i suoi metodi per poter gestire l'evento (i metodi sottostanti devono essere dichiarati anche se non li devi utilizzare):
Codice:
     import java.awt.event.*;
     public class NomeClasse implements KeyListener{
       public void keyPressed(KeyEvent e){}
       public void keyReleased(KeyEvent e){}
       public void keyTyped(KeyEvent e){}
     }
keyPressed si avvia alla pressione del tasto,keyReleased al suo rilascio mentre keyTyped ancor prima che la pressione del tasto abbia effetto.Utilizzando keyTyped potresti scrivere qualcosa tipo:
Codice:
   public void keyTyped(KeyEvent e){
    if(e.getKeyChar()==e.VK_ENTER){
      //codice da svolgere se è stato premuto invio
    }
   }
 
Ciao razor ,intanto grazie per aver risposto

...come faccio a far funzionare il tutto? io ho fatto cosi':

Codice:
     public class NomeClasse implements KeyListener{
            public void keyPressed(KeyEvent e){
           if(e.getKeyChar()==e.VK_ENTER){
      testo=t1.getText();t1.setText("");
      //codice da svolgere se è stato premuto invio
    }
   }
       public void keyReleased(KeyEvent e){}
       public void keyTyped(KeyEvent e){}
     }


Codice:
         NomeClasse n=new NomeClasse(); 
         KeyEvent ev= new KeyEvent();
         n.keyPressed(ev);


ma non va.... (non compila)

non ho capito come bisogna avviare l'ascoltatore? (ossia il thread che fa attenzione a quando premo invio) boh...


per quanto riguarda la scroll bar sai cosa accade?
appena si riempie tutto il campo (in verticale) appare ovviamente la scrollbar...
tale scroll bar si rimpicciolisce senza seguire il testo che viene aggiunto...

per leggere il testo aggiunto bisogna fare uso del mouse(trascinando la scroll bar in basso per ogni riga che si aggiunge)

quindi la scroll bar non segue il testo...resta ferma ... :lol:

programma semplice:

Codice:
    import java.awt.event.*;
    
    public class prova{
             public class NomeClasse implements KeyListener{
             public void keyPressed(KeyEvent e){
             if(e.getKeyChar()==e.VK_ENTER){
                   //codice da svolgere se è stato premuto invio
                     System.out.println("ciao\n");
                     }
    }
       public void keyReleased(KeyEvent e){}
       public void keyTyped(KeyEvent e){}
     }
    public static void main(String args[]) {
        
    }
}


che oggetto devo creare per avviare l'operazione?? cosi' come sta non fa nulla questo prog...
 
razor,scusa mi sono spiegato male... ti spiego meglio..

immagina che ho un pulsante chiamato "ciao"
a questo pulsante gli ho già associato del codice da eseguire...
ho già constatato che questo codice viene effettivamente eseguito nel momento in cui clicco col mouse sopra questo pulsante...

cio che vorrei fare io è fare in modo che quando clicco su invio venga premuto il pulsante "ciao" ...in tal modo, è conseguenziale associare gli stessi eventi del pulsante "ciao" alla pressione del tasto invio... come lo faccio?? :mad:
 
ho tralasciato una cosa...:asd:....se posti tutto il codice te lo correggo io...anche perchè stai facendo un po' di confusione col codice...
niente doppi post...esiste il tasto modifica apposta!
 
Codice:
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.io.*;
   
   public class prova extends JApplet {  
  
  private    JTextArea t = new  JTextArea(15,25);
  private    JTextField t1 = new  JTextField(25);
  private    JButton b1 = new  JButton("ok");
  private    JButton b2 = new  JButton("Cancella");   
  private    Container cp = getContentPane();
  private    String testo = new String();



    
    public void init(){      

       cp.setLayout(new FlowLayout());
       cp.add(new JScrollPane(t));
       cp.add(new JScrollPane(t1));
       cp.add(b1);
       cp.add(b2);
       b1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){testo=t1.getText();t.append(testo + " Hola\n");t1.setText("");}});
       b2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){t1.setText("");}});
        } 
        


    
    public static void main(String args[])  throws IOException {    

      prova c = new prova();
      JFrame f = new JFrame("prova");   
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      f.getContentPane().add(c);
      f.setSize(320,350);    
      c.init();
      c.start();
      f.setResizable(false);      
      f.setVisible(true);     
     
        
    }
}


ecco... in parole povere vorrei che in corrispondenza della pressione hardware del pulsante invio venga premuto il pulsante software "ok" ...
poi, che al pulsante "ok" siano associate delle righe di codice questo poco importa...serranno eseguite dopo l'invio... che ne dici?
 
il classico metodo con cui utilizzo il keyListener su l'applet non funge...strano...tuttavia ecco la soluzione,da modificare a tuo piacimento,con l'applet viewer funge:


edit: bastava un semplice repaint...ecco ora:
Codice:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
  
   public class Prova extends JApplet implements ActionListener,KeyListener {  
  
  private    JTextArea t = new  JTextArea(15,25);
  private    JTextField t1 = new  JTextField(25);
  private    JButton b1 = new  JButton("ok");
  private    JButton b2 = new  JButton("Cancella");  
  private    Container cp = getContentPane();
  private    String testo = new String();



    
    public void init(){      

       cp.setLayout(new FlowLayout());
       cp.add(new JScrollPane(t));
       cp.add(new JScrollPane(t1));
       cp.add(b1);
       cp.add(b2);
       b1.addActionListener(this);
       b2.addActionListener(this);
       t1.addKeyListener(this);
       
        }
        
    public void actionPerformed(ActionEvent e){
        testo=t1.getText();t.append(testo + " Hola\n");t1.setText("");
        t1.setText("");
    }
        
	public void keyPressed(KeyEvent e) {}
	public void keyReleased(KeyEvent e) {}
	public void keyTyped(KeyEvent e) {
	    if(e.getKeyChar()==e.VK_ENTER){
	       t.append("sono stato premuto");
	       }
		repaint();
	}
}
 
Razor ma non è possibile cliccare il pulsante come dicevo io? cioè premendo l'invio della tastiera...
perchè cosi' come hai fatto te avrei due oggetti che mi danno lo stesso risultato

il pulsante "ok"
e la pressione del tasto invio...

io vorrei che con la pressione di invio si premesse via software anche l' "ok", conosci un modo per farlo??
 
nel senso che :
1)premo invio sulla tastiera (dopo aver scritto nel form)
2)premendo invio si preme da solo anche il tasto "ok"
3)il codice associato al tasto "ok" viene eseguito
 
Non so niente di Java, ma a questo punto non fai prima ad abbinare il tuo evento direttamente alla pressione di Invio e mettere lì un tasto "Ok" che se premuto da il via allo stesso evento abbinato al tasto Invio? Ripeti il codice, ma dovresti ottenere ciò che vuoi...
 
non ripeti il codice...crei un metodo che effettua una determinata operazione,se premi il bottone questo richiama il metodo,se premi invio richiama cmq il metodo...che io sappia non c'è modo di premere invio e vedere graficamente il tasto che si clicca da solo,potresti provare magari a fare un setEnabled(false) e subito dopo setEnabled(true) sul bottone.
 
Va bene ragazzi... credevo i potesse fare... allora no problem..! faccio come dice razor..

ora mi servirebbe una cosa...
come faccio a spostare la scroll pane a piacimento??? ho notato che esiste un metodo setScrollPosition(int x, int y) ... ma come capsita si usa? mi fareste un esempio??

grazie
 
R4z0r_Cr4$H ha detto:
ma guarda che la scrollpane scorre da sola...non capisco quale sia il problema....

incasinando il codice con altro codice mi dà il problema che invece di scorrere verso il basso scorre verso l'alto... cmq programmo in java da poco tempo,sono inesperto... sai dirmi come si usa quel metodo?
ho creato una scroolpane x
ma ,andando a fare x.metodo(x,y) mi dà errore in fase di compilazione ...bah,ci rinuncio.... :confused:

per quanto riguarda l'evento,invece ... vorrei usarlo cosi':

Codice:
t.addKeyListener(new KeyListener(){public void keyTyped(KeyEvent e){if(e.getKeyChar()==e.VK_ENTER){ testo=t1.getText();t1.setText("");t.append("ecco: " + testo + "\n");} repaint(); }});

mettendolo in un alto metodo della classe... come si puo' fare?
qual'è lo schema logico da seguire??

questo è il metodo che uso per i bottoni,e mi vene bene... ma con l'addKeyListener ho molti problemi....bah
 
Stato
Discussione chiusa ad ulteriori risposte.