2009-11-13 60 views
13

Ho un JScrollPane con FlowLayout che voglio avere una larghezza fissa. Dovrebbe scorrere solo verticalmente e il contenuto dovrebbe essere riorganizzato automaticamente quando ridimensiono la finestra. Penso che ci dovrebbe essere un metodo come setEnableHorizontalScroll(false) ma non riesco a trovarlo.disable scroll orizzontale in jscrollpane

C'è un modo semplice per farlo?

risposta

7

Finalmente ho trovato il modo, si prega di vedere questo molto breve esempio, senza trucchi avanzate necessarie:

public class MyTest extends JFrame { 

    public static void main(String[] args) { 
     MyTest test = new MyTest(); 
     test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     test.setSize(300, 200); 
     test.setVisible(true); 
    } 

    public MyTest() { 
     String[] data = { 
      "Arlo", "Cosmo", "Elmo", "Hugo", 
      "Jethro", "Laszlo", "Milo", "Nemo", 
      "Otto", "Ringo", "Rocco", "Rollo" 
     }; 
     JList list = new JList(data); 
     list.setLayoutOrientation(JList.HORIZONTAL_WRAP); 
     list.setVisibleRowCount(0); 
     JScrollPane scroll = new JScrollPane(list); 
     this.add(scroll); 
    } 
} 

adattati da Sun's tutorial

19

È possibile utilizzare:

import static javax.swing.ScrollPaneConstants.*; 
// ... 
JScrollPane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER); 

... ma questo solo impedisce la barra di scorrimento orizzontale da sempre di essere mostrato.

Per ottenere il contenuto da riorganizzare automaticamente dipenderà dal contenuto. A o JEditorPane lo farà automaticamente (senza la necessità del codice precedente).

+0

I contenuti sono 'JPanel's di dimensione fissa, e non sono automaticamente riordinati. La barra di scorrimento scompare semplicemente :( – phunehehe

+0

'JScrollPane.HOTRIZONTAL_SCROLLBAR_NEVER' è la variabile che devi passare ad essa se vuoi saltare questa importazione. La soluzione di Matthew funziona per me, grazie – LouwHopley

+0

Altri componenti dovrebbero implementare Scrollabile e lasciare getScrollableTracksViewportWidth() restituire false –

6

Questa non è una soluzione personalizzata pronta per l'uso nel JDK.

È possibile utilizzare WrapLayout.

Oppure è possibile creare un pannello personalizzato e implementare l'interfaccia scorrevole. La chiave in questo caso è overriding di getScrollableTracksViewportWidth() per restituire true, quindi la larghezza delle finestre e non la larghezza del pannello viene utilizzata per scopi di layout. Un esempio di questo approccio può essere trovato nel ScrollableFlowPanel

+0

Non mi piace l'idea di usare una libreria di terze parti, Java dovrebbe avere quello predefinito penso: Ma grazie per la condivisione, fa quello che mi serve già :) – phunehehe

-1

mi sono imbattuto anche questo problema ... la mia soluzione era di modificare il JScrollPane source code e passare un parametro aggiuntivo per disabilitare lo scorrimento orizzontale. Le modifiche sono molto semplici:

On line 53:

$.fn.jScrollPane = function (settings, horizontalScrollingEnabled) { 

Poi, sulla linea 177:

if (horizontalScrollingEnabled) { 
isScrollableH = percentInViewH > 1; 
} else { 
isScrollableH = false; 
} 

Questo è tutto ciò che serve a cambiare. Minimizza il codice sorgente modificato e includilo nella tua pagina. Quando si inizializza il JScrollPane, è ora possibile impostare se si desidera scorrere come in orizzontale in modo da:

$('.scroll-pane').jScrollPane("", false); 

Speranza che aiuta.

+3

L'OP chiedeva dello Swing Componente JScrollPane in Java, non il plugin jScrollPane per jquery. – Dathan

+0

@Dathan LOL: D: D Questo utente era ubriaco – khandelwaldeval

-1

Basta impostare il display su "none" utilizzando la classe CSS per la barra orizzontale. Nella parte inferiore del vostro jScrollPlane (dopo che si è inizializzata esso), aggiungere in:

$('.jspHorizontalBar').css({ 'display': 'none' }); 

Se si utilizza multipli su una pagina, e alcuni che hanno bisogno della barra orizzontale, si può sempre modificare il targeting per includere il genitore elemento.

+3

La domanda riguarda i componenti Java Swing. – xmedeko

-1

Basta eliminare isScrollableH = percentInViewH > 1; in jquery.jscrollpane.js

+1

La domanda riguarda i componenti Java Swing. –

1

È possibile utilizzare al posto di org.jdesktop.swingx.JXPanel javax.swing.JPanel come il ViewportView del vostro JScrollPane:

1. download "SwingX 1.6.4 Tutto - Binario", e aggiungere il vaso per biblioteche del vostro progetto here.

2. set JXPanel come ViewportView di la tua JScrollPane invece di un JPanel:

JScrollPane scrollPane = new JScrollPane(); 
JXPanel panel = new JXPanel(); 
scrollPane.setViewportView(panel); 

3. aggiuntivi seguenti due affermazioni:

panel.setScrollableTracksViewportHeight(false); 
panel.setScrollableTracksViewportWidth(true); 

4. Quindi è possibile aggiungere elementi a JXPanel come hai fatto ad un JPanel