2015-12-07 79 views
0

我剛開始研究GWT,希望能夠就如何達到某個結果向專家進行諮詢。GWT ScrollPanel標頭

我需要一個帶有標題的scrollPane,類似於swing的JSCrollPane。對於那些不熟悉的人來說,JScrollPane可以有一個行或一個列標題。現在讓我們把重點放在一個帶有行標題的地方。主要組件是一個Canvas,我可以根據滾動窗格的滾動條位置繪製視圖。

對於行標題,可以用垂直堆疊的組件填充此標題。垂直滾動條滾動垂直組件堆棧以及主要客戶區域。水平滾動條水平滾動主區域,但不滾動保持始終可見的行標題。

據我所知,標準的GWT ScrollPanel不直接支持頭文件。

首先,標準GWT中是否有提供此功能的組件?我查看了Cell組件,這可能適用於列標題,但似乎不適用於行列。某些第三方(可能是開源)庫中是否有這樣的組件?

如果我不得不實施這個,你會建議什麼方法?

我認爲只爲行標題創建一個VerticalPanel,一個Canvas與主要組件的視圖一樣大。我可以在滾動更改時在畫布上繪製內容,但我不確定如何僅製作VerticalPanel顯示(視口)的一部分。

我也考慮過在ScrollPane中只包含垂直面板,有一個單獨的水平滾動條(虛擬)水平滾動畫布,但在這種情況下,垂直滾動條出現在標題和畫布之間,而不是我想要的是。

謝謝!

回答

1

使用帶有兩個子元素的LayoutPanel:FlowPanel(或Label)來表示您的標題(垂直或水平)和ScrollPanel。將這些小部件放在一起。

LayoutPanel layoutPanel = new LayoutPanel(); 
Label header = new Label("My header"); 
ScrollPanel scrollPanel = new ScrollPanel(); 

layoutPanel.add(header); 
layoutPanel.add(scrollPanel); 

layoutPanel.setWidgetLeftWidth(header, 0, Unit.PX, 36, Unit.PX); 
layoutPanel.setWidgetLeftRight(scrollPanel, 36, Unit.PX, 0, Unit.PX); 

LayoutPanel實現了ProvideResize,所以它會給ScrollPanel提供可用的空間。確保LayoutPanel本身是實現了ProvideResize的小部件的子元素,或者明確地設置其大小。

如果您只支持現代瀏覽器,則可以使用flexbox layout model獲得相同的結果。在標題上設置「flex-grow:0」,在ScrollPanel上設置「flex-grow:1」。優點是你可以通過改變一個CSS屬性來將相同的組件變成垂直或水平。而且它更靈敏,更容易適應不同的屏幕尺寸。

+0

我試過這段代碼,但它沒有顯示任何內容: 標籤h = new Label(「My header」); //新標題(tb); ScrollPanel sp = new ScrollPanel(); lp.add(h); lp.add(sp); lp.setWidgetLeftWidth(h,0,Unit.PX,36,Unit.PX); lp.setWidgetRightWidth(sp,36,Unit.PX,0,Unit.PX); RootPanel rp = RootPanel.get(「rootContainer」); –

+0

這意味着您的LayoutPanel的高度爲零。正如我所提到的,它必須是一個實現了ProvideResize(即另一個LayoutPanel,VerticalPanel等)的Widget的直接子元素,或者您必須在代碼/ css中設置它的高度。 –

+0

另外,在你的片段中,我沒有看到你將這個小部件添加到你的RootPanel的位置。 –

相關問題