Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    12

    Per ESPERTI! Passare indice a Vector dinamicamente!

    Salve a tutti! Avrei un problema che non riesco a risolvere...
    Praticamente inserito in un JPanel 2 vector:

    codice:
    private Vector<JTextField> texts = new Vector<JTextField>();
    private Vector<JLabel> stati = new Vector<JLabel>();
    Ho generato un JPanel (GridLayout(lezioni.size(),2) fatto tipo di un certo numero di righe e 2 sole colonne: in una colonna inserisco un JTextfield e l altra inserisco una JLabel.

    Ad ogni JTextfield ho associato un Listener tramite un ciclo che pero non riesco a far funzionare come vorrei :

    codice:
    for (int k=0; k<lezioni.size(); k++){
    ........
    
    texts.elementAt(k).addMouseListener(new MouseListener(){
     public void mouseClicked(MouseEvent e) {
    	if (e.getClickCount() == 1){
     	CalendarioStato cal = new CalendarioStato(lezione.getInt("id_lezione"),"",db, ((JTextField)e.getComponent()), true, tipo, ((JLabel)stati.lastElement())) ;
     	}
     }
      public void mousePressed(MouseEvent e) {}
      public void mouseReleased(MouseEvent e) {}
      public void mouseEntered(MouseEvent e) {}
      public void mouseExited(MouseEvent e) {}
    });
    Il problema sta qui-> ((JLabel)stati.lastElement())... cliccando sul Jtextfield si apre un nuovo JFrame calendario dove selezionando il giorno e cliccando poi su un JButton("inserisci") immetto una data formattata nel JTextfield (precedentemente cliccato) e setto un etichetta ("testo A", "testo b", "testo c") che si dovrebbe aggiornare nella JLabel di fianco .. La Jtextfield si aggiorna perfettamente mentre la JLabel CORRISPONDENTE NO o meglio, cambia si etichetta, ma sempre e solo quella dell ultima riga! Vorrei trovare il modo che cliccando sul JTextfield (della 3 riga ad esempio) automaticamente riesca a passare alla classe CalendarioStato proprio la JLabel che ha di fianco(cioè della 3 riga).. e non so come poterlo fare.

    Ho cercato di riassumere per non scrivere papiri di codice..Spero di essermi spiegato in un italiano pseudo-comprensibile...

    QUALCHE IDEA??

  2. #2
    Ciao,
    Se nei due vector gli elementi che sono logicamente associati, si trovano ad indici uguali, potresti leggere l'indice a cui è posizionata la JTextField (con indeox()), e quindi usare tale indice per prelevare il riferimento alla JLabel.

    Altrimenti potresti estendere la classe JTextField ed aggiungere un attributo che rappresenti un riferimento alla JLabel alla quale è associata.
    Anche se a mio avviso, non sarebbe una soluzione ottimale.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    una soluzione più elegante è creare un pannello (che estende JPanel) al cui interno poni la coppia label/textfield (ovviamente a questo livello devi gestire il layout e dimensionamento).

    Nel tuo pannello/frame principale aggiungi un vector di questi pannelli creati, in modo da avere sempre la coppia (e non dover giocare coi vettori).

    Ovviamente la tua estensione deve avere dei metodi per pilotare i contenuti della label e del campo di testo (es. setLabelText che non fa altro che una settext sulla label)
    RTFM Read That F*** Manual!!!

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Dal punto 6 del regolamento interno
    Indica il linguaggio di programmazione nel titolo (es. [JAVA] per discussioni generiche, [J2EE], [JSP], [J2ME], [ANDROID], ecc.) e una descrizione breve ma significativa del problema trattato nella discussione, evitando epiteti come "urgente", "help", "aiuto", "solo per esperti" o termini scontati come "problema con". Un titolo inadeguato può portare alla chiusura della discussione. Ciascuna discussione deve trattare esclusivamente uno e un solo problema: quello indicato nel titolo. Per ogni nuovo problema che non sia strettamente correlato, è necessario aprire una nuova discussione.
    Ho corretto, di conseguenza, il titolo della discussione.
    "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

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.