美食网站建设的意义,wordpress栏目页只显示标题,本溪网站建设,如果制作一个自己的网站就像我的一个朋友曾经说过的那样#xff0c;SWT的ScrolledComposite是令人讨厌的野兽。 在某种程度上#xff0c;我同意。 这可能是为什么有太多关于如何使用此小部件的问题的原因。 但不仅是ScrolledComposite的作者受到了谴责。 当某个软件无法按您预期的方式工作时#… 就像我的一个朋友曾经说过的那样SWT的ScrolledComposite是令人讨厌的野兽。 在某种程度上我同意。 这可能是为什么有太多关于如何使用此小部件的问题的原因。 但不仅是ScrolledComposite的作者受到了谴责。 当某个软件无法按您预期的方式工作时则……您诅咒……并尝试一些不同的尝试……并以不同的方式诅咒……并向Google寻求帮助……并希望找到这个可爱的小文章。 哪个告诉您RTFM – ups嗯我的意思是当然看看文档。 而且如果您阅读JavaDoc您将了解有两种使用ScrolledComposite的方法并查看了相应的示例代码。 二合一 第一种方法适用于固定大小的内容如果无法完全看到所包含的控件将显示滚动条否则将其隐藏。 另外如果进行了相应的设置则ScrolledComposite会模仿浏览器的工作方式。 内容将随着ScrolledComposite的大小而增长和缩小–直到可见区域小于指定的最小大小。 在后一种情况下将显示滚动条并且内容绝不会减少到最小大小以下。 该视频并排显示了不同的操作模式 在左侧当窗口放大时内容的大小保持不变并且在不再需要滚动条时消失。 但是在右侧初始窗口大小小于指定的最小大小因此会出现滚动条。 随着窗口变大内容也随窗口增长。 滚动固定内容 设置ScrolledComposite以显示固定内容非常简单 scrolledComposite new ScrolledComposite( parent, SWT.H_SCROLL | SWT.V_SCROLL );
Label label new Label( scrolledComposite, SWT.NONE );
label.setBackground( display.getSystemColor( SWT.COLOR_DARK_GREEN ) );
label.setSize( 400, 400 );
scrolledComposite.setContent( label ); 请注意您需要显式指定H_SCROLL和V_SCROLL样式标志。 否则将不会创建任何滚动条并且ScrolledComposite几乎没有用 稍后会在滚动条上更多介绍 。 代码段的另一个值得注意的部分是在其中创建内容的地方-这里是一个400 x 400像素的绿色标签。 内容的父级必须是ScrolledComposite本身。 如果没有您会看到有趣的结果。 最后必须告知ScrolledComposite应该使用setContent管理的内容。 该示例演示了最简单的情况其中内容是单个控件。 但是如果要滚动的内容包含多个控件则需要将它们包装到具有适当布局的Composite中如联系详细信息示例中所示。 在此上下文中固定大小的内容并不表示该内容必须或不能更改其大小。 如果发生这种情况则ScrolledComposite将适应新的大小并相应地显示或隐藏滚动条。 但是如果调整ScrolledComposite的大小则内容不会更改其大小。 滚动扩展内容 通过添加几行可以扩展上述代码片段以扩展其内容 scrolledComposite.setExpandHorizontal( true );
scrolledComposite.setExpandVertical( true );
scrolledComposite.setMinSize( 250, 250 ); 之后ScrolledComposite会在调整大小时扩展内容并且仅在滚动条的大小减小到小于最小大小时才显示滚动条。 SWT API提供了进一步的方法来设置最小大小。 通过setMinWidth和setMinHeight或setMinSizePoint分别确定最小宽度和高度。 扩展内容时将最小大小设置为零默认值是合法的。 结果内容将缩小而没有下限并且永远不会显示滚动条。 这是ScrolledComposite的两种基本模式管理固定大小的内容或扩展和减少内容。 仅垂直滚动 我遇到的另一个用例是有一个未知长度的项目清单。 考虑一下冗长的联系方式表单其中包含多行每行包括一个标签和一个输入字段。 每行的宽度占用的空间尽可能多但是如果行数超过可用高度则该数字应该是可滚动的。 稍作调整即可将上面显示的扩展ScrolledComposite扩展为仅垂直滚动。 此处的关键是动态设置最小大小。 每当ScrolledComposite更改其大小时内容的最小宽度将设置为ScrolledComposite的可用宽度。 实现所描述行为的代码非常简单 scrollComposite.addListener( SWT.Resize, event - {int width scrollComposite.getClientArea().width;scrollComposite.setMinSize( parent.computeSize( width, SWT.DEFAULT ) );
} ); 调整大小的侦听器使用getClientArea查询ScrolledComposite的可用空间 并根据给定的客户区域宽度计算内容的必要大小。 最后将结果大小设置为ScrolledComposite的最小大小。 在此示例中内容的外观由两列布局控制。 标签列的宽度足以显示最长的标签而输入字段列则使用剩余的宽度。 每行依次使用最佳高度即显示单行输入字段所需的高度。 即使我还没有看到实际的用例但这种方法在水平扩展时也可以使用。 计算ScrolledComposite的首选大小 没有比看到应用程序设计时考虑到单个屏幕分辨率字体大小或配色方案或全部更令人难过的了。 为避免这种情况联系人详细信息表单使用自适应策略来计算其初始大小。 由于内容由重复项组成此处标记为输入字段因此将单个项目的大小作为度量单位。 这里的项目数是从证据中获得的数字但在其他情况下也可能是从数据源获得的有限行数。 公式本身很简单 numberOfItems 10
initialHeight numberOfItems * ( itemHeight spacing ) 进一步的改进将是对照屏幕尺寸检查最终的高度并在必要时减小其高度。 生成的布局可在不同平台屏幕分辨率和字体设置之间很好地缩放。 如果这引起了您的兴趣您可能还想阅读Eclipse和SWT的响应式UI 。 垂直和水平滚动条 要掌握滚动条请分别使用getVerticalBar和getHorizontalBar。 如片段中所示需要指定V_SCROLL和H_SCROLL样式标志才能创建垂直和/或水平滚动条。 如果省略了相应的样式标志则不会创建任何滚动条并且getVerticalBar或getHorizontalBar将返回null。 但是可以随时显示或隐藏启用或禁用现有滚动条。 默认情况下ScrolledComposite仅在必要时显示滚动条但可以使用setAlwaysShowScrollBars将此行为更改为始终显示滚动条。 因此通常需要同时创建两个滚动条并让ScrolledComposite决定何时显示或隐藏单个条。 通常请注意滚动条由ScrolledComposite管理。 因此查询它们的状态是安全的但是操纵属性很可能会干扰ScrolledComposite的事物视图。 若要更改滚动条的位置以使内容的某些部分可见请使用下面讨论的指定方法。 上述唯一的例外可能是滚动条的启用状态。 如果确实希望这样做则可以安全地调用setEnabled。 滚动到视图 ScrolledComposite有几种更改滚动条位置的方法。 最基本的是setOrigin。 滚动内容控件以使内容中的指定点位于左上角。 所需位置可以指定为单独的x和y坐标也可以指定为点。 因此有一个getOrigin方法可返回当前显示在左上角的点。 为了给客户节省一些坐标映射有一个showControl它建立在setOrigin上并滚动内容以便可见给定的控件。 如果焦点控件始终可见则可以通过setShowFocusedControl建议ScrolledComposite自动将焦点控件滚动到视图中。 总结SWT ScrolledComposite 实际上ScrolledComposite并不是SWT集合中最直观的小部件我希望这里介绍的食谱将有助于更好地与之相处。 这里讨论的用例是到目前为止我所遇到的用例。 但是我想知道进一步的用途如果您想分享您的意见请发表评论。 所显示的摘录是准备运行的小型示例程序的摘录可以在这里找到 https : //gist.github.com/rherrmann/b1a2a633cd4c9b607fe7 最后但并非最不重要的一点是我想指出的是此处显示的所有概念和代码不仅适用于SWT而且在具有Eclipse RAP的浏览器中同样运行良好。 您甚至可以使用此RAP在线演示更改各种标志和属性并立即查看其效果。 翻译自: https://www.javacodegeeks.com/2016/03/swt-scrolledcomposite-explained.html