Frage

ich eine JScrollPane mit FlowLayout habe, dass ich eine feste Breite haben soll. Es sollte nur vertikal werden Scrollen, und der Inhalt automatisch neu angeordnet werden, wenn ich die Größe des Fensters. Ich denke, es sollte ein Verfahren wie setEnableHorizontalScroll(false) sein, aber kann es nicht finden.

Gibt es eine einfache Möglichkeit, dies zu tun?

War es hilfreich?

Lösung 3

Schließlich fand ich heraus, wie Sie dieses sehr kurzes Beispiel sehen, keine fortgeschrittenen Tricks benötigt:

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);
    }
}

Angepasst von Sun Tutorial

Andere Tipps

Sie können mit:

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

... aber das nur verhindert, dass die horizontale Scrollbar jemals gezeigt wird.

Um die Inhalte automatisch neu zu ordnen, wird davon abhängen, was der Inhalt ist. Ein JTextPane oder JEditorPane wird dies automatisch für Sie tun (ohne die Notwendigkeit für den obigen Code).

Dies ist keine individuelle Lösung aus der Box in dem JDK.

Sie können über den WrapLayout .

Sie können auch einen benutzerdefinierten Bedienfelder und implementieren die Scrollable Interface erstellen. Der Schlüssel wird in diesem Fall überschreiben getScrollableTracksViewportWidth () true zurück, so dass die Ansichtsfenster Breite und nicht die Breite der Platte ist für Layoutzwecke verwendet. Ein Beispiel für diesen Ansatz kann in der ScrollableFlowPanel

Sie können org.jdesktop.swingx.JXPanel anstelle von javax.swing.JPanel als ViewportView Ihrer JScrollPane:

1 Download "SwingX 1.6.4 All - Binary"., Und fügen Sie das Glas zu einem Projekt der Bibliotheken hier.

2 gesetzt JXPanel als ViewportView Ihrer JScrollPane anstelle eines JPanel:.

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

3 in beiden folgenden Anweisungen:.

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

4. können Sie Elemente zu JXPanel hinzufügen, wie Sie zu einem tat JPanel

versuchen diese, funktioniert diese fein auf mich jScrollPane1.setHorizontalScrollBar (null);

ich auf dieses Thema kam auch ... war meine Lösung die JScrollPane Quelle zu ändern Code und einen zusätzlichen Parameter zu deaktivieren, den horizontalen Bildlauf passieren. Die Änderungen sind wirklich einfach:

In Zeile 53:

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

Dann auf der Linie 177:

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

Das ist alles, was Sie ändern müssen. Minifizieren die modifizierten Quellcode und füge ihn auf Ihrer Seite. Wenn die JScrollPane Initialisierung können Sie nun einstellen, ob Sie es wollen, horizontal scrollen etwa so:

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

Ich hoffe, das hilft.

Stellen Sie einfach die Anzeige auf „none“ mit der CSS-Klasse für Reck. Am unteren Rand des jScrollPlane (nachdem Sie es initialisiert haben), fügen Sie in:

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

Wenn Multiples auf einer Seite verwenden, und einige, die die horizontale Leiste, dann können Sie immer bearbeiten Sie Ihre Targeting das übergeordnete Element aufzunehmen.

Just löschen isScrollableH = percentInViewH > 1; in jquery.jscrollpane.js

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top