如何檢測Java SWT表的垂直ScrollBar何時可見?我需要這些信息來重新計算列的寬度。似乎沒有事件(除了選擇)在ScrollBar上被觸發。如何檢測SWT表的滾動條可見性變化
回答
我想你已經正確地發現,沒有簡單的方法檢測when the vertical ScrollBar is visible
。無論如何,這裏提供的解決方案是一種破解。
我正在使用本SWT片段compute the visible rows in a table中介紹的概念。隨着我也使用SWT Paint Event
。
的基本概念是類似如下:
- 計算可見行(項目)的數量。
- 將其與總行數(項目)進行比較。
- 在添加行(項目)時發生的某些事件中執行所有這些操作。我選擇了
SWT Paint Event
>>代碼
import org.eclipse.swt.*;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class TableScrollVisibilityTest
{
private static int count;
public static void main(String [] args)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setBounds(10,10,300,300);
shell.setLayout(new GridLayout(2,true));
final Table table = new Table(shell, SWT.NONE);
GridData data = new GridData(GridData.FILL_BOTH);
data.horizontalSpan = 2;
table.setLayoutData(data);
count = 0;
final Button addItem = new Button (shell, SWT.PUSH);
addItem.setText ("Add Row");
data = new GridData(SWT.FILL, SWT.FILL, true, false);
data.horizontalSpan = 2;
addItem.setLayoutData(data);
final Text text = new Text(shell, SWT.BORDER);
text.setText ("Vertical Scroll Visible - ");
data = new GridData(SWT.FILL, SWT.FILL, true, false);
data.horizontalSpan = 2;
text.setLayoutData(data);
addItem.addListener (SWT.Selection, new Listener()
{
public void handleEvent (Event e)
{
new TableItem(table, SWT.NONE).setText("item " + count);
count++;
}
});
table.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
Rectangle rect = table.getClientArea();
int itemHeight = table.getItemHeight();
int headerHeight = table.getHeaderHeight();
int visibleCount = (rect.height - headerHeight + itemHeight - 1)/itemHeight;
text.setText ("Vertical Scroll Visible - [" + (table.getItemCount()>= visibleCount)+"]");
// YOUR CODE HERE
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
}
>>輸出
對於ITEMCOUNT < numberofvisible行
對於ITEMCOUNT> = numberofvisible行
注意 -如果你要使用的油漆事件,然後嘗試保持最低的計算,因爲它是頻繁調用。
希望這會有所幫助。
我發現,在調整大小的通知後,您可以區分Scrollable的邊界和客戶區域。任何一個維度的差異都應該表明存在一個滾動條。
這個工作對我來說:
boolean isScrollVisible = table.getVerticalBar().getVisible();
Point vBarSize = table.getVerticalBar().getSize();
int width_diff =
current_width.x - totalColumnWidth - (isScrollVisible ? vBarSize.x : 0);
問題是關於檢測*改變*是否可見,例如通過一些事件。 – 2014-10-05 19:39:05
當然,我使用了ControlAdapter的controlResized方法。 我認爲這很清楚。 tableviewer.getTable()。addControlListener( \t新的ControlAdapter(){ \t \t公共無效controlResized(ControlEvent資料發送){ \t \t \t布爾可見= tableviewer.getTable()。。getVerticalBat()getVisible(); \t \t \t \t} }); 我發現很少有人提到該表具有知道滾動條是否可見的簡單方法。 無需計算外部容器的大小,或計算表中的項目... – Alex 2015-04-18 09:33:51
- 1. 如何檢測JScrollPane的滾動條是否改變可視性?
- 2. 設置ScrolledComposite的滾動條可見性爲false SWT
- 3. 檢測HWND可見性變化
- 4. 事件處理程序中的滾動條可見性檢測
- 5. MATLAB - 可用的滾動條可見性
- 6. 如何檢測(並更正?)各種滾動條可見性跨瀏覽器?
- 7. iOS中的滾動條可見性
- 8. 滾動條可見
- 9. 滾動SWT滾動條
- 10. 使垂直滾動條可見和水平滾動條可見
- 11. 滾動可見性
- 12. RelativeLayout在滾動Gridview的變化的可見性
- 13. jquery檢測顯示或可見性的變化
- 14. 複選框的可見性變化,而滾動RecyclerView
- 15. 滾動條可見,不能滾動
- 16. 滾動條和表列不可見
- 17. 檢測水平滾動可見或不可見
- 18. 在代碼隱藏中測試列表框的滾動條可見性
- 19. 當可見性發生變化時,IFrame滾動條在Chrome上消失
- 20. 如何檢測SWT對話框是否已打開並可見?
- 21. Vaadin 7如何檢查滾動條是否可見
- 22. 如何檢查滾動條是否可見?
- 23. 動態檢測滾動條
- 24. 檢測用戶可見性
- 25. 如何檢測DOM屬性的變化?
- 26. 壁紙可見性變化
- 27. 使滾動條總是可見的UIScrollView
- 28. slimscroll滾動條是不可見的
- 29. 基本的Android滾動條不可見
- 30. 始終可見的水平滾動條
使用Paint事件是一個好主意!我沒有想到這一點。感謝您的偉大解決方案! – 2011-04-18 08:02:16
我發現只要滾動條的可見性發生變化,就會引發SWT.RESIZE事件,因此您也可以使用它。 – Zordid 2012-11-06 15:38:16