[java] Pannello Con Barra Di Scorrimento

Pubblicità

LS1987

Utente Èlite
Messaggi
3,530
Reazioni
516
Punteggio
141
Buonasera, sto programmando in Java un'applicazione con interfaccia grafica, il mio obiettivo sarebbe costruire un'interfaccia grafica (JFrame) con 2 pannelli, il primo dei quali dovrebbe contenere una barra di scorrimento da attivare qualora il numero di elementi inserito fosse troppo elevato (prendo degli elementi da un vettore e devo stampare tante label o textArea quanti sono gli elementi di un vettore, ciascuna delle quali contiene la rappresentazione testuale degli elementi del vettore), quindi dovrebbe essere un JScrollPane, giusto? Ho trovato un po' di codice, che ho rielaborato, per un pannello singolo, ma non funziona su stack overflow (non voglio fare spam, ma vorrei semplicemente mettere un link al topic in cui si trova il codice originale, lo farò nel prossimo post se mi autorizzate)

Ho già effettuato la modifica che prevede di aggiungere il panel allo scrollPane ogni volta che aggiungo un oggetto.
Java:
    static JFrame frame = new JFrame();
    static JPanel panel = new JPanel();
    static JPanel contentPane = new JPanel(null);
    static JScrollPane scrollPane;

    public static void main (String [] args)
    {
        for (int i = 1; i < 30; i++)
        {
            JButton button = new JButton("Hello "+i);
            panel.getX();
            button.setBounds(10, i * 30 + 10, 100, 25);
            /**
            button.setAlignmentX(10);
            button.setAlignmentY(i * 30 + 10);
            */
            JLabel label = new JLabel("Hello "+i);
            panel.add(button);
            panel.add(label);
            contentPane.add(button);    //Se aggiungo il bottone al contentPane, mi rimane fuori dall'area di scroll
            //panel.addContainerGap();
        }

        scrollPane = new JScrollPane(panel);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setBounds(20, 30, 300, 50);
        contentPane.setPreferredSize(new Dimension (500, 400));
        contentPane.add(scrollPane);
        frame.setContentPane(contentPane);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
    }

Invio in allegato l'immagine che rappresenta più o meno che vorrei ottenere : l'ho ottenuta montando due immagini, una della finestra di netBeans e l'altra di bottoni a caso che vorrei inserire nel Panel di sotto, che rappresenta semplicemente un Panel di dimensione fissa che contiene un numero fisso di elementi, chiaramente al netto nei colori, il verdino chiaro improbabile è stato scelto per distinguere i due pannelli. Come vedete il pannello superiore ha la barra di scorrimento laterale e sotto, mentre non mi interessa nel pannello di sotto.

Si può fare quello che chiedo io in Java? Come dovrei riscrivere il codice? Oppure non si può e dovrei utilizzare un altro linguaggio di programmazione? Se dovessi cambiare linguaggio di programmazione dovrei riscrivere tutto il programma (tranne forse in C #, perché molte cose sono identiche). Se serve richiamare librerie esterne non ci sono problemi. In alternativa ci sarebbero delle altre soluzioni, bisognerebbe trovare un componente che fa andare a capo e magari un componente che funge da separatore orizzontale, tempo fa forse l'avevo trovato, ma non avendolo mai utilizzato non me lo ricordo più e non avevo mai verificato,
 

Allegati

  • Esempio.webp
    Esempio.webp
    39.8 KB · Visualizzazioni: 245
Ultima modifica da un moderatore:
Uh, vero scusate ho fatto copia e incolla del messaggio che avevo scritto in biblioteca senza mettere tag.
 
E' normale si comporti così, stai sbagliando l'aggiunta al contentPane. Sostituisci:

Java:
contentPane.add(button);

Con:

Java:
contentPane.add(panel);

Poi dovresti avere la situazione desiderata. Sempre se non li vuoi incolonnati e non disposti su una riga (quindi 1 label ed 1 button per riga). In questo caso potresti provare con un BoxLayout come contenitore dello scrollpane, ed un altro panel al suo interno con il layout di default (Flow).
 
Pubblicità
Pubblicità
Indietro
Top