Pagina 1 di 10 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 91

Discussione: [Java] JList ed eventi

  1. #1

    [Java] JList ed eventi

    Salve a tutti! il mio problema è questo: ho una JList con varie voci, e 1 pulsante. quando scelgo una voce dalla JList, premendo il pulsante dovrebbe rimuovere la voce selezionata (ke poi corrisponderebbe a rimuovere un campo da un ArrayList)... devo gestire tutto ciò con ascoltatori esterni...come posso fare? se può servire ecco il codice:

    codice:
    package es02;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
    import javax.swing.event.ListSelectionEvent;
    
    public class RimozFrame extends JFrame implements ActionListener {
    	private JButton b1,b2,b3;
    	private JLabel l1;
    	private JList c1;
    	private JTextField t1;
    	private JScrollPane pane;
    	private Box riga1,riga2,col1,col2;
    	private ProfFrame parent;
    	public RimozFrame(ProfFrame parent){
    		
    		this.parent=parent;
    		
    		setTitle("Rimozione/Modifica appello");
    		setBounds(50,50,700,400);
    		Container cp = getContentPane();
    		JPanel mainPanel = new JPanel();
    		
    		b2 = new JButton("Modifica");
    		b3 = new JButton("Rimuovi");
    		
    		c1 = new JList();
    		
    		String[] s = new String[parent.getGest().esamiSize()];
    		try{
    			Wex w = parent.getGest(); 
    			Appello[] ap = w.visualElenco();
    	
    			for(int i=0;i<ap.length;i++){
    				s[i] = ap[i].toString();			
    			}	
    		} catch (Exception ex){
    		}
    		if(s.length==0){
    		    JLabel l = new JLabel("Non ci sono appelli!");
    			mainPanel.add(l);
    		}
    		c1 = new JList(s);
    		pane = new JScrollPane(c1);
    		c1.setVisibleRowCount(10);
    		t1=new JTextField(20);		
    				
                    col1=new Box(BoxLayout.Y_AXIS);
    		col1.add(c1);
    		col1.add(Box.createHorizontalStrut(10));
    		col2=new Box(BoxLayout.Y_AXIS);
    		col2.add(b2);
    		col2.add(Box.createVerticalStrut(30));
    		col2.add(b3);
    		
    		mainPanel.add(col1);
    		mainPanel.add(col2);
    		
    		b3.addActionListener(new RimozListener(this));
    		
    		cp.add(mainPanel);
    		
    	}
    
    	public void actionPerformed(ActionEvent e) {
    				
    	}
    	
    	public void valueChanged(ListSelectionEvent e){
    		
    	}
    
    }
    grazie


  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Non ho provato, ma potresti gestire la cosa in questo modo...
    nel codice del pulsante ( actionPerformed() ):

    1) Ricavi l'indice della voce selezionata
    2) In una variabile ricavi l'oggetto selezionato
    3) Rimuovi l'oggetto selezionato dalla JList
    4) Rimuovi l'oggetto dall'ArrayList

    Puoi tranquillamente utilizzare un codice come questo:
    codice:
    // Ricavo l'indice dell'elemento selezionato:
    int indice = miaJList.getSelectedIndex();
    
    // Ricavo l'oggetto selezionato
    MioOggetto oggetto = (MioOggetto) miaJList.getSelectedValue();
    
    // Rimuovo l'oggetto selezionato:
    miaJList.removeSelectionInterval(indice, indice);
    
    // Rimuovo l'oggetto dall'ArrayList
    int indice = miaArrayList.indexOf(oggetto);
    miaArrayList.remove(indice);
    Ciao.
    "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

  3. #3
    t ringrazio molto x la tua risposta sempre pronta, domani provo e t dico...ciao ciao

  4. #4
    si ma il listener mi serve esterno, nn interno alla classe del frame, xkè poi c'è anke un altro pulsante da gestire quindi li gestisco tutti e 2 con 2 listeners esterni...

  5. #5
    cmq ho provato col tuo modo, quando seleziono l'item nella JList mi dà quest'eccezione, forse riguarda il cast... boh... :

    codice:
    	public void valueChanged(ListSelectionEvent e){
    	    int indice = c1.getSelectedIndex();
    	    Appello app = (Appello) c1.getSelectedValue();
    	    c1.removeSelectionInterval(indice, indice);
    	    int indice2 = parent.getGest().getEsami().indexOfapp);
    	    parent.getGest().getEsami().remove(indice2);
    
    	}
    l'eccezione ke mi dà è:

    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String
    at es02.RimozFrame.valueChanged(RimozFrame.java:77)
    at javax.swing.JList.fireSelectionValueChanged(Unknow n Source)
    at javax.swing.JList$ListSelectionHandler.valueChange d(Unknown Source)
    at javax.swing.DefaultListSelectionModel.fireValueCha nged(Unknown Source)
    at javax.swing.DefaultListSelectionModel.fireValueCha nged(Unknown Source)
    at javax.swing.DefaultListSelectionModel.fireValueCha nged(Unknown Source)
    at javax.swing.DefaultListSelectionModel.changeSelect ion(Unknown Source)
    at javax.swing.DefaultListSelectionModel.changeSelect ion(Unknown Source)
    at javax.swing.DefaultListSelectionModel.setSelection Interval(Unknown Source)
    at javax.swing.JList.setSelectionInterval(Unknown Source)
    at javax.swing.plaf.basic.BasicListUI$Handler.adjustF ocusAndSelection(Unknown Source)
    at javax.swing.plaf.basic.BasicListUI$Handler.mousePr essed(Unknown Source)
    at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent( Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(U nknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unkno wn Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierar chy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String
    at es02.RimozFrame.valueChanged(RimozFrame.java:77)
    at javax.swing.JList.fireSelectionValueChanged(Unknow n Source)
    at javax.swing.JList$ListSelectionHandler.valueChange d(Unknown Source)
    at javax.swing.DefaultListSelectionModel.fireValueCha nged(Unknown Source)
    at javax.swing.DefaultListSelectionModel.fireValueCha nged(Unknown Source)
    at javax.swing.DefaultListSelectionModel.setValueIsAd justing(Unknown Source)
    at javax.swing.JList.setValueIsAdjusting(Unknown Source)
    at javax.swing.plaf.basic.BasicListUI$Handler.mouseRe leased(Unknown Source)
    at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent( Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(U nknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unkno wn Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierar chy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)


    grazie

  6. #6
    forse il problema è ke il cast non và a buon fine xk getSelectedIndex() ritorna una stringa...

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Scusa il ritardo, ma lavorando non ho moltissimo tempo per guardare il forum (anche se sembro sempre collegato ).
    Allora... per gestire il tutto su Listener esterni differenti è sufficiente che tu tu crei una classe per ciascun listener (e immagino che tu l'abbia già fatto), e che tu passi al costruttore di questi listener gli oggetti di cui hai bisogno (quindi l'ArrayList e la JList). A questo punto, dentro ai listener li gestisci come se fossero locali al listener stesso.

    Da quel che vedo, però, tu vuoi gestire la cosa dal Listener associato al JList, quindi quest'ultimo oggetto lo puoi tranquillamente ricavare dall'evento ListSelectionEvent:
    codice:
    JList lst = (JList) e.getSource();
    Per quanto riguarda il ClassCastException dipende da come hai gestito la cosa. Se il ListCellRenderer che hai usato è quello di default (non l'hai modificato), allora il metodo getSelectedObject() ti restituisce una stringa... dunque basta modificare il cast:
    codice:
    String app = (String) c1.getSelectedValue();
    Se invece hai utilizzato un Renderer diverso, allora potrai gestirtelo a mano, in base alle tue impostazioni.


    Ciao.
    "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

  8. #8
    figurati, nn ti preoccupare, mi rispondi appena hai tempo!anzi, ti ringrazio ke 6 molto disponibile! alla fine ho deciso di fare senza listener esterni,seno viene troppo incasinato x le mie capacità
    x quanto riguarda il cast, il ListCellRenderer ( che non so cosa sia ) ho usato quello di default... a me servirebbe ke ritornasse un'oggetto mio( che conterrebbe al suo interno nome, cognome, data...) e non una stringa xk nn saprei come gestirla. a meno ke nn facessi un confronto tra la stringa ottenuta dalla lista e quella ottenuta facendo il toString di ogni campo dell'arraylist, ma mi sembra poco efficace...
    boh...tu come faresti?
    grazie ancora...
    ciao

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Se tu alla JList passi degli oggetti di tipo Appello, allora potresti provare a recuperare l'oggetto attraverso il ListModel.
    Non l'ho provato, ma credo che si possa fare in questo modo:
    codice:
    int indice = jlist.getSelectedIndex();
    Appello app = (Appello) jlist.getModel().getElementAt(indice);
    In effetti io, tutte le volte che ho utilizzato le JList, ho avuto a che fare con delle Stringhe, quindi il problema non mi si poneva. Ma la cosa mi sembrava limitativa... credo che il ListModel, a questo punto, giochi il ruolo di "contenitore" dei dati veri e propri (o, per lo meno, offre un'interfaccia per il loro reperimento).


    Ciao.
    "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

  10. #10
    non accetta ancora il cast!!!maledizione!

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.