2012-11-13 14 views
5

Come posso limitare la larghezza di visualizzazione JScrollPanel? Non voglio che lo scroll orizzontale accada in ogni caso. Ho provato a fornire il proprio JViewport ma questo non aiuta molto.restringi JScrollPane larghezza vista

private static class WidthRestrictingViewport extends JViewport { 
     private Container contents; 

     public WidthRestrictingViewport(final Container cnts) { 
      contents = cnts; 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      if (getParent() instanceof JScrollPane) { 
       JScrollPane sp = (JScrollPane) getParent(); 
       return new Dimension(sp.getWidth(), contents.getHeight()); 
      } 
      return super.getPreferredSize(); 
     } 

     @Override 
     public Dimension getMaximumSize() { 
      return getPreferredSize(); 
     } 
    } 

E il codice che creano JScrollPane

Container fpdp = .... 

    JScrollPane sp = new JScrollPane(); 
    sp.setViewport(new WidthRestrictingViewport(fpdp)); 
    sp.setViewportView(fpdp); 

contents esempio che io fornisco prende la sua larghezza massima, però voglio la sua larghezza di essere non più di JScrollPane larghezza scorrimento orizzontale in modo da non succederà. Che cosa sto facendo di sbagliato?

+1

Non capisco la domanda. Cosa dovrebbe succedere con il contenuto di 'JScrollPane' quando è più largo della dimensione effettiva di' JScrollPane'. Basta tagliare? In tal caso, potresti considerare di rendere invisibile la barra di scorrimento ('JScrollPane # getHorizontalScrollBar # setVisible (false)'); – Robin

+0

@Robin, Non tagliato. Riduci larghezza di visualizzazione per scorrere la larghezza del riquadro. Immagina un pannello con il layout dei bordi e il contenuto posizionato al centro. Ma in questo caso solo la larghezza del contenuto è limitata dalla larghezza del pannello e l'altezza del contenuto può crescere come è necessario (con l'aggiunta della barra di scorrimento). –

+1

Non penso che sia responsabilità di 'JViewPort' porre restrizioni sulla sua vista in merito alla larghezza che può raggiungere, questo è più sulla vista stessa. Dai un'occhiata all'interfaccia ['Scrollabe'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/Scrollable.html), in particolare [' Scrollable # getScrollableTracksViewportWidth'] (http : //docs.oracle.com/javase/7/docs/api/javax/swing/Scrollable.html#getScrollableTracksViewportWidth%28%29) – MadProgrammer

risposta

2

Ci scusiamo per le mie povere spiegazioni. Ho trovato un modo per farlo. Grazie a JScrollpane needs to shrink its width.

Un altro problema che ho riscontrato è un gestore di layout errato in ScrollablePanel. Quello era FlowLayout che ha rovinato tutto. Non l'ho capito subito e ho pensato che il problema riguardasse l'utilizzo dell'interfaccia Scrollable.

Quindi ho appena preso ScrollablePanel e impostato il suo gestore di layout su BorderLayout e ora va tutto bene!

Problemi correlati