Oppure

Loading
17/06/12 14:49
foralobo
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):

import javax.swing.*;
import java.awt.*;
public class Frame01 {
    public static void main(String[] args){
        JFrame frame = new JFrame("panel demo");
        JPanel panel = new JPanel();
        Container c = frame.getContentPane();
        panel.setSize(100,100);
        panel.setLayout(new GridLayout(1000,1));
        for(int i = 0; i<1000;i++)
        panel.add(new JLabel("JLabel "+i));

        JScrollPane jsp = new JScrollPane(panel);
        c.add(jsp);
        frame.setSize(100,100);
        frame.setVisible(true);

    }
}


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


aaa
18/06/12 13:18
Bonny
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 ..
aaa
18/06/12 15:33
foralobo
vorrei avere come risultato lo scroll non assegnando layoutmanager al jpanel per farla breve
aaa
19/06/12 9:56
Bonny
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
//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.
aaa