如何检测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