2009-11-13 118 views
13

我有一個JScrollPaneFlowLayout,我想要一個固定的寬度。它應該只是垂直滾動,並且在調整窗口大小時應自動重新排列內容。我認爲應該有一個像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 JTextPaneJEditorPane會自動爲您做到這一點(不需要上述代碼)。

+0

內容是'固定大小的JPanel's,他們不會自動重新排列。滾動條完全消失:( – phunehehe 2009-11-13 16:16:22

+0

'JScrollPane.HOTRIZONTAL_SCROLLBAR_​​NEVER'是變量,你必須傳遞給它,如果你想跳過導入。馬修的解決方案適用於我,謝謝。 – LouwHopley 2011-05-26 15:21:53

+0

其他組件應該實現滾動,讓getScrollableTracksViewportWidth()返回false如下所述。 – 2015-11-27 14:04:55

6

這不是開箱即用的JDK解決方案。可以使用WrapLayout

或者您可以創建自定義面板並實現Scrollable接口。這種情況下的關鍵是重寫getScrollableTracksViewportWidth()以返回true,因此視圖寬度而不是面板的寬度用於佈局目的。這種方法的一個例子可以在ScrollableFlowPanel

+0

我不喜歡使用第三方庫的想法。Java的應該有在默認情況下,我認爲。 但謝謝你的分享,它做什麼,我需要已經:) – phunehehe 2009-11-25 11:45:42

-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問的是搖擺JScrollPane組件在Java中,沒有JScrollPane的jQuery插件。 – Dathan 2011-06-17 23:32:47

+0

@Dathan LOL:d:d此用戶是喝醉了 – khandelwaldeval 2016-01-12 14:34:08

-1

只需使用水平條的CSS類將顯示設置爲「none」即可。在您的jScrollPlane(你已經初始化後)的底部,添加在:

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

如果使用的是頁面上的倍數,有的認爲需要的單槓,你可以隨時修改您的定位包括父元件。

+3

的問題是關於Java Swing組件。 – xmedeko 2012-06-27 14:04:12

-1

在jquery.jscrollpane.js

+1

現在的問題是關於Java Swing組件。 – 2015-04-28 18:06:48

1

你可以用它代替的javax.swing org.jdesktop.swingx.JXPanel只要刪除isScrollableH = percentInViewH > 1;。作爲JPanel中JScrollPane的你的ViewportView:

下載 「SwingX 1.6.4全部 - 二進制」,和jar添加到您的項目庫here.

2.集JXPanel爲一體的ViewportView您JScrollPane的,而不是一個JPanel:

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

附加以下兩個語句:

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

4.那麼你可以添加元素JXPanel爲你做一個JPanel