Creare una lista usando anche JScrollBar

di il
13 risposte

Creare una lista usando anche JScrollBar

Salve ragazzi ho un problema ho un frame al suo interno vorrei che mi comparissero i componenti di tutto un'arreyList con vicino il pulsante di selezione(JCheckBox) e la possibilità di scrollare il tutto per vedere gli altri componenti, ma ovviamente non mi funziona vi posto il codice :


public void visualizzaOfferte(ArrayList<Prodotto> catalogo)
{
	JFrame frame = new JFrame();
	JScrollBar scrollo = new  JScrollBar();
	JButton aggiungiACarrello = new JButton("aggiungi \n a carrello");
	JButton acquista = new JButton("acquista");
	JButton annulla = new JButton("annulla");
	JPanel pannelloBottoni = new JPanel();
	JPanel pannelloCatalogo = new JPanel();
	JPanel superPannello = new JPanel();
	
	ArrayList<JCheckBox> prodotti = new ArrayList<JCheckBox>();
	JCheckBox appoggio = new JCheckBox();
	String supp= " ";
	for(int i=0;i<catalogo.size();i++)
	{// prendo il nome del prodotto 
		supp=catalogo.get(i).getNomeEvento();
           // setto una variabile di tipo JCheckBox
		appoggio.setName(supp);
           // aggiungo la variabile all'arrayList di JCheckBox
		prodotti.add(appoggio);

		pannelloCatalogo.add(prodotti.get(i));
	}
	pannelloBottoni.add(aggiungiACarrello);
	pannelloBottoni.add(acquista);
	pannelloBottoni.add(annulla);
	pannelloCatalogo.add(scrollo);

	superPannello.setLayout(new GridLayout(2,1));
	superPannello.add(pannelloCatalogo);
	superPannello.add(pannelloBottoni);
	frame.add(superPannello);
	frame.pack();
	frame.setVisible(true)
}
vorrei far visualizzare una cosa del genene la casellina di spunta affianco il nome del prodotto e la barra per lo scrollo mentre mi esce solo la casella di spunta la barra senza i nomi degli articoli

13 Risposte

  • Re: Creare una lista usando anche JScrollBar

    broke31 ha scritto:


    ho un frame al suo interno vorrei che mi comparissero i componenti di tutto un'arreyList con vicino il pulsante di selezione(JCheckBox)
    Per una cosa del genere può andarti bene o una sequenza di JCheckBox (con testo specifico per ognuno) messi in colonna .... oppure qualcosa di un po' più elaborato come un JTable.
    Visto che mi pare di capire stavi tentando il primo modo, va bene.

    broke31 ha scritto:


    la possibilità di scrollare il tutto per vedere gli altri componenti, ma ovviamente non mi funziona
    Il componente JScrollBar da solo si usa parecchio raramente. In Swing, in generale, un componente "grande" da scrollare si mette come "view" dentro un JScrollPane ed è poi quest'ultimo che va aggiunto in un altro contenitore (non il componente scrollato!).
  • Re: Creare una lista usando anche JScrollBar

    Non posso aggiungere manualmente i il contenuto delle checkbox perché sono presenti in arraylist che mi passano da fuori quindi credo di aver bisogno per forza di qualche componente che mi riesca a far aprire l'arraylist a prendermi il nome del prodotto e a metterlo in una checkbox e scriverla ma non so proprio come fare...
  • Re: Creare una lista usando anche JScrollBar

    broke31 ha scritto:


    Non posso aggiungere manualmente i il contenuto delle checkbox perché sono presenti in arraylist che mi passano da fuori quindi credo di aver bisogno per forza di qualche componente che mi riesca a far aprire l'arraylist a prendermi il nome del prodotto e a metterlo in una checkbox e scriverla ma non so proprio come fare...
    Ricevi un ArrayList<Prodotto>, itera su questo e per ognuno istanzia un JCheckBox con un testo che componi prendendo "qualcosa" (che devi sapere tu cosa) dal Prodotto i-esimo.
    Quale è il dubbio/problema?
  • Re: Creare una lista usando anche JScrollBar

    Se vedi nel mio codice bene o male abbiamo detto e fatto la stessa cosa credo na non funziona come mi aspetto
  • Re: Creare una lista usando anche JScrollBar

    broke31 ha scritto:


    Se vedi nel mio codice bene o male abbiamo detto e fatto la stessa cosa credo na non funziona come mi aspetto
    Intanto, ripeto, l'uso diretto di un singolo JScrollBar è molto raro. Come ho detto, per lo scrolling si usa JScrollPane.
    E comunque dal tuo codice vedo che hai istanziato 1 solo JCheckBox fuori dal ciclo ... non N. Non puoi aggiungere N volte lo stesso identico componente!

    Quindi non è come ti aspetti perché non è così che va fatto.

    Quindi ricapitoliamo:
    1) Ti serve un pannello (JPanel) con un layout manager che faccia stare N JCheckBox in colonna. Puoi usare un GridLayout di N righe/1 colonna oppure un javax.swing.BoxLayout "verticale".

    2) Iteri gli N prodotti, per ognuno di essi istanzi un nuovo JCheckBox con il testo che vuoi. Il JCheckBox lo aggiungi nel pannello sopra citato.

    3) Il JPanel detto al punto 1) lo metti come "view" in JScrollPane.
    JScrollPane scrollPane = new JScrollPane(pannelloCheckbox);
    4) Il JScrollPane (solo questo, non più il JPanel) lo aggiungi in un altro contenitore, es. il content pane di JFrame, ad esempio nella parte CENTER (BorderLayout di serie).
  • Re: Creare una lista usando anche JScrollBar

    Però avevo istanziato anche un arrayList di chackbox la logica che ho provato a seguire era prendo il nome setto una variabile di appoggio di tipo chacobox e la metto nell'arraylist mentre se ho capito bene devo avere un arrayList di appoggio ? Ti ricordo che ho già istanziato anche un arrayList di chackbox
  • Re: Creare una lista usando anche JScrollBar

    broke31 ha scritto:


    Però avevo istanziato anche un arrayList di chackbox
    In una collezione/struttura dati è perfettamente possibile avere più elementi che fanno riferimento allo stesso identico oggetto (ovvio, può essere appropriato o no ... dipende).

    A livello di GUI non puoi avere una singola istanza di un componente e sperare che possa "replicarsi" fisicamente per vederne N !

    broke31 ha scritto:


    la logica che ho provato a seguire era prendo il nome setto una variabile di appoggio di tipo chacobox e la metto nell'arraylist mentre se ho capito bene devo avere un arrayList di appoggio ? Ti ricordo che ho già istanziato anche un arrayList di chackbox
    Tenere un ArrayList<JCheckBox> è assolutamente ok, serve a te per rintracciare facilmente il checkbox i-esimo in un secondo momento. Ma è una cosa "extra", è solo per te .... non centra direttamente con la creazione della GUI.
  • Re: Creare una lista usando anche JScrollBar

    Ho modificato nel seguente modo ma comunque non mi funziona
    
    
    	public JPanel costruisciCatalogo(ArrayList <Prodotto> catalogo)
    	{	JScrollPane scrollo;
    		JPanel pannelloCatalogo = new JPanel();
    		ArrayList<JLabel> prodotti;
    		JLabel appoggio;
    				scrollo = new JScrollPane(pannelloCatalogo);
    		pannelloCatalogo = new JPanel();
    		
    		
    			prodotti = new ArrayList<JLabel>();
    		pannelloCatalogo.setLayout( new GridLayout(catalogo.size(),2));
    		String nomeEvento ="";
    		for(int i=0 ;i<catalogo.size();i++)
    		{	JLabel scrittaProdotto = new JLabel();
    			
    			 JCheckBox  checkAppoggio = new JCheckBox();
    			scrittaProdotto.setText(""+catalogo.get(i).getId());
    			pannelloCatalogo.add(scrittaProdotto);
    			pannelloCatalogo.add(checkAppoggio,BorderLayout.AFTER_LAST_LINE);
    
    			 
    		}
    		
    	pannelloCatalogo.add(scrollo);
    	JFrame frame = new JFrame();
    	frame.add(pannelloCatalogo);
    	frame.setVisible(true);
    		return pannelloCatalogo;
    		
    	}
    
    
  • Re: Creare una lista usando anche JScrollBar

    broke31 ha scritto:


    ho modificato nel seguente modo ma comunque non mi funziona
    Mi spiace ma c'è un po' di confusione in questo codice!

    Ne dico giusto 2:

    1) Se pannelloCatalogo ha un GridLayout ... allora il constraint BorderLayout.AFTER_LAST_LINE non serve a nulla.

    2)
    scrollo = new JScrollPane(pannelloCatalogo);
    pannelloCatalogo.add(scrollo);

    Noti qualcosa di "strano"? pannelloCatalogo lo metti dentro JScrollPane e quest'ultimo cerchi di metterlo dentro pannelloCatalogo !

    EDIT:
    Poi comunque, scusa, costruisciCatalogo restituisce il pannelloCatalogo per quale motivo?
  • Re: Creare una lista usando anche JScrollBar

    Hai ragione, ho tolgo quelle righe di codice ma lo stesso non riesco ad uscirmene l'idea era che dall'altra parte chi invoca il metodo si deve ritrovare un pannello con il carrello dei prodotti e lo scroll, quindi ho tolto anche quel frame che veniva creato...
  • Re: Creare una lista usando anche JScrollBar

    broke31 ha scritto:


    hai ragione, ho tolgo quelle righe di codice ma lo stesso non riesco ad uscirmene
    Quindi non hai ancora risolto? I passi basilari/minimi, in generale, li ho descritti nella mia 3° risposta.

    È chiaro che, come in tante altre cose, il tutto va fatto con un minimo di ordine e linearità. Se ci infili constraint che non servono, istanziazioni inutili, add che sono inappropriati .... sono d'accordo anch'io che non ne esci .....
  • Re: Creare una lista usando anche JScrollBar

    Il 4 passo della tua risposta non soo riuscito a tarlo (3 post)
  • Re: Creare una lista usando anche JScrollBar

    broke31 ha scritto:


    Il 4 passo della tua risposta non soo riuscito a tarlo (3 post)
    frame.getContentPane().add(tuoScrollPane);

    (supponendo che non hai toccato il layout manager del content pane, che per default è BorderLayout e la add che ho appena detto mette nell'area CENTER).
Devi accedere o registrarti per scrivere nel forum
13 risposte