2012-04-27 14 views
12

Desidero un JPanel con una dimensione e una posizione definita. All'interno di JPanel, ho un certo numero di elementi (pulsanti) inseriti orizzontalmente. Poiché il mio JPanel ha una larghezza definita, se aggiungo molti pulsanti, non potrei vederlo. In questo caso, ho bisogno di una barra di scorrimento per questo JPanel. Ma questo JPanel deve essere una DIVERSA MISURA IN UNA CERTA POSIZIONE all'interno di una JFrame. La barra di scorrimento dello JPanel si è posizionata sotto di esso orizzontalmente. Qualcuno può aiutarmi? L'ho provato senza successo!Scorrimento di un JPanel

+0

per quanto ne so, il punto è poiché il vostro 'JPanel' ha uno' Definito larghezza/altezza/size', quindi una volta che aggiungere qualcosa ad esso, che va oltre la sua dimensione, non si può vedere che cosa, anche con ' JScrollPane' aggiunto ad esso, poiché anche 'JScrollPane' non può andare oltre la dimensione di' JPanel', quindi quei componenti sono nascosti sempre :(. Dal momento che se non si definisce la sua dimensione, i componenti vengono prima aggiunti al 'JPanel' e quindi 'preferredSize()' è determinato implicitamente da 'doLayout()' specie di cose, quindi il tuo 'JScrollPane' funziona in quella situazione, ma non qui. –

+1

Considera anche [' JToolBar'] (http://docs.oracle .com/javase/tutorial/uiswing/components/toolbar.html) o [layout adatto] (http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html). Senza uno [sscce] (http://sscce.org/) che chiarisce il significato di _certain size_ and _certain position_, questa domanda non può essere risolta nella sua forma attuale. – trashgod

risposta

17

Utilizzare un JScrollPane e imporre la sua dimensione preferita alla dimensione specificata (oppure impostare il contenitore di scorrimento LayoutManager su null e chiamare setBounds() sullo scrollpan). Imposta anche i criteri della barra di scorrimento. Ecco un piccolo campione di che:

import java.awt.Dimension; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 

public class Test { 

    public static void main(String... args) { 
     JFrame frame = new JFrame(); 
     JPanel panel = new JPanel(); 
     for (int i = 0; i < 10; i++) { 
      panel.add(new JButton("Hello-" + i)); 
     } 
     JScrollPane scrollPane = new JScrollPane(panel); 
     scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); 
     scrollPane.setBounds(50, 30, 300, 50); 
     JPanel contentPane = new JPanel(null); 
     contentPane.setPreferredSize(new Dimension(500, 400)); 
     contentPane.add(scrollPane); 
     frame.setContentPane(contentPane); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 
+0

Emm, il problema è che ho bisogno di localizzare JPanel in una posizione specifica di JFrame. Inoltre, deve avere una dimensione definita. – Chu

+0

@BrallanAguilar o si utilizza un LayoutManager per posizionare e dimensionare i componenti, impostare il LayoutManager su null e chiamare setBounds() per posizionare e dimensionare il componente. In questo caso, devi farlo sul JScrollPane –

+0

Puoi aiutarmi con un esempio, per favore? – Chu

5

Aggiungi tutti i pulsanti al pannello. Quindi aggiungi questo pannello a scrollpane.

panel.add(button1); 
panel.add(button2); 
panel.add(button3); 
. 
. 
. 
panel.add(buttonn); 

Una volta aggiunti i pulsanti nel pannello, aggiungi il pannello allo schermo.

JScrollPane panelPane = new JScrollPane(panel); 

E quindi aggiungere questo pannello alla cornice.

+0

Mi dispiace, ma ho bisogno della parte di JPanel in una determinata dimensione e posizione. Inoltre, l'orientamento della barra di scorrimento :) – Chu

+0

Scusa poco scarso in inglese .. 'determinato' significa? –

+0

"specifico" jeje: D – Chu