Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - JPanel con scrool
Forum - Java - JPanel con scrool

Avatar
foralobo (Normal User)
Pro


Messaggi: 146
Iscritto: 30/11/2009

Segnala al moderatore
Postato alle 16:49
Domenica, 17/06/2012
Salve, come da oggetto avrei l'esigenza di scrollare un JPanel all'interno di JScroolPane.
La cosa non è ardua. In linea di massima è semplice se consideriamo il codice (non è il codice del mio programma, riporto questo perchè è molto più semplice):

Codice sorgente - presumibilmente Java

  1. import javax.swing.*;
  2. import java.awt.*;
  3. public class Frame01 {
  4.     public static void main(String[] args){
  5.         JFrame frame = new JFrame("panel demo");
  6.         JPanel panel = new JPanel();
  7.         Container c = frame.getContentPane();
  8.         panel.setSize(100,100);
  9.         panel.setLayout(new GridLayout(1000,1));
  10.         for(int i = 0; i<1000;i++)
  11.         panel.add(new JLabel("JLabel "+i));
  12.  
  13.         JScrollPane jsp = new JScrollPane(panel);
  14.         c.add(jsp);
  15.         frame.setSize(100,100);
  16.         frame.setVisible(true);
  17.  
  18.     }
  19. }



ecco ma io nel mio lavoro devo praticamente fare quello che c'è nel codice utilizzando perà "null" come layoutmanager al posto del GridLayout. Perchè?

Ho un Pannello contenitore che deve essere scrollato.
All'interno devo mettere dei piccoli pannelli di dimensione fissa (150x100)
Il gridlayout non va bene perchè mi ridimensiona i pannelli secondo lo spazio possibile e tramite altri layout manager non riesco a fare questo lavoro.

Ma in un Layout null, mi calcolo le varie coordinate dei pannelli e li inserisco. Piano piano questi pannelli vanno aumentando e finche sono un tot, ci entrano nel pannello contenitore. Quando non ci entrano più, sono sempre aggiunti al pannello ma non più visualizzati.

Ecco perchè ho bisogno di scrollare quel pannello.

Con layoutmanager settato a null, il JScroolPane non vuole saperne. E' come se non capisse la dimensione del pannello al suo interno.

Qualcuno può aiutarmi? grazie



PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 15:18
Lunedì, 18/06/2012
Il GriLayout in questo caso non centra nulla con il ScrollPane perchè il JPanel che ha come layout il GridLayout è contenuto nel ScrollPane; in questo caso stai creando una matrice 1000 righe per 1 colonna di JLabel se poi il JPanel devi inserirlo in una parte specifica del Container devi associare un layout al Container.... forse non ho capito cosa ti serve ..

PM Quote
Avatar
foralobo (Normal User)
Pro


Messaggi: 146
Iscritto: 30/11/2009

Segnala al moderatore
Postato alle 17:33
Lunedì, 18/06/2012
vorrei avere come risultato lo scroll non assegnando layoutmanager al jpanel per farla breve

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 11:56
Martedì, 19/06/2012
Ascolta il JPanel ha di default il layout FlowLayout() ovvero gli oggetti all'interno vengono messi tutti in fila in orizzontale se provi a commentare la riga
Codice sorgente - presumibilmente Plain Text

  1. //panel.setLayout(new GridLayout(1000,1));



il risultato sarà JLabel0 JLabel2 ..... JLabel999

Ti ripeto che la scelta del layout implica il modo in cui vengono disposti gli oggetti all'interno del Jpanel segue che non centra un tubo con il JScrolPane()

Infatti l'unico motivo per cui quest'ultimo cambia stato (dopo aver commentato la riga) ovvero da verticale ad orizzontale è perchè con la nuova distribuzione delle JLAbel non serve più lo scroll verticale ma solo orizzontale.

Settare a null il layout non ha senso si capisce dal fatto che ce ne sia uno di default:)

Ti consiglio di studiare bene cosa sono e come si usano..

A presto.

PM Quote