2009-11-13 6 views
13

У меня есть JScrollPane с FlowLayout, что я хочу иметь фиксированную ширину. Он должен прокручиваться только по вертикали, и содержимое должно быть перестроено автоматически при изменении размера окна. Я думаю, что должен быть такой метод, как setEnableHorizontalScroll(false), но он не может его найти.отключить горизонтальную прокрутку в jscrollpane

Есть ли простой способ сделать это?

ответ

7

Наконец я узнал, как, смотрите этот очень короткий пример, не продвинутые трюки не нужны:

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

адаптировано из Sun's tutorial

19

Вы можете использовать:

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

... но это только предотвращает горизонтальную полосу прокрутки из когда-либо показано на рисунке.

Чтобы получить возможность автоматического изменения содержимого, будет зависеть от содержимого. A JTextPane или JEditorPane сделают это за вас автоматически (без необходимости использования вышеуказанного кода).

+0

Содержимое являются 'JPanel's фиксированного размера, и они не являются автоматически перестраиваются. Полоса прокрутки просто исчезает :( – phunehehe

+0

'JScrollPane.HOTRIZONTAL_SCROLLBAR_NEVER' - это переменная, которую вы должны передать ей, если вы хотите пропустить этот импорт. Решение Matthew работает для меня, спасибо. – LouwHopley

+0

Другие компоненты должны реализовывать прокручиваемые и пусть getScrollableTracksViewportWidth() возвращает false как указано ниже. –

6

Это нестандартное решение из коробки в JDK.

Вы можете использовать WrapLayout.

Или вы можете создать пользовательскую панель и реализовать прокручиваемый интерфейс. Ключ в этом случае переопределяет getScrollableTracksViewportWidth(), чтобы вернуть true, поэтому ширина видового экрана, а не ширина панели используются для целей макета. Примером такого подхода можно найти в ScrollableFlowPanel

+0

Мне не нравится идея использования сторонней библиотеки. Я думаю, что по умолчанию у Java должно быть это по умолчанию. Но спасибо за обмен, он делает то, что мне нужно :) – phunehehe

-1

я наткнулся этот вопрос также ... моим решением было изменить JScrollPane source code и передать дополнительный параметр для отключения горизонтальной прокрутки. Правки очень просты:

В строке 53:

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

Затем на линии 177:

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

Это все, что нужно изменить. Минимизируйте измененный исходный код и включите его на свою страницу. При инициализации JScrollPane, теперь вы можете установить, хотите ли вы его для прокрутки по горизонтали, как так:

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

Надежда, что помогает.

+3

OP спрашивал о Swing JScrollPane в Java, а не плагин jScrollPane для jquery. – Dathan

+0

@Dathan LOL: D: D Этот пользователь был пьян – khandelwaldeval

-1

Просто установите для дисплея значение «none», используя класс CSS для горизонтальной полосы. В нижней части jScrollPlane (после того, как вы инициализирован его), добавьте в:

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

При использовании мультипликаторов на странице, а некоторые НУЖНО турник, вы всегда можете изменить настройки таргетинга, чтобы включить родительский элемент.

+3

Речь идет о компонентах Java Swing. – xmedeko

-1

isScrollableH = percentInViewH > 1; Просто удалите в jquery.jscrollpane.js

+1

Вопрос о компонентах Java Swing. –

1

Вы можете использовать org.jdesktop.swingx.JXPanel вместо javax.swing.JPanel как ViewportView вашего JScrollPane:

1. скачать "SwingX 1.6.4 Все - Binary", и добавить баночку библиотеки вашего проекта here.

2. набор JXPanel как ViewportView из ваш JScrollPane вместо JPanel:

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

3. оных следующие два утверждения:

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

4., то вы можете добавлять элементы в JXPanel, как вы делали в JPanel

Смежные вопросы