当前位置: 首页 > 面试题库 >

用swt在columnheader中组合

鲁炳
2023-03-14
问题内容

我想要一个具有组合的表作为其列标题之一。我已经从这个问题中发现Table是不可能的:
列标题SWT中的控件(组合,广播,文本)

有办法解决吗?我尝试了TableViewer,但也没有找到使用它的方法。有什么办法可以实现?


问题答案:

您可以Composite使用常规控件在表格上方的区域中创建自己的列标题。

然后,您将需要调整这些控件的大小以匹配表列的大小。一种方法是使用表布局类扩展jface
TableColumnLayout并覆盖setColumnWidths每次列大小更改时调用的方法,因此您可以调整标题控件的宽度。

注意:TableColumnLayout需要Composite仅在上包含,Table而不是直接在上Table

所以这样的布局:

/**
 * Table column layout extended to manage a separate table header.
 */
public class TableColumnLayoutWithSeparateHeader extends TableColumnLayout
{
  /** Header composite */
  private final Composite _headerComposite;
  /** Right margin adjust */
  private final int _rightMargin;


  /**
   * Constructor.
   *
   * @param headerComposite Header composite
   * @param rightMargin Right margin value
   */
  public TableColumnLayoutWithSeparateHeader(final Composite headerComposite, final int rightMargin)
  {
    super();

    _headerComposite = headerComposite;
    _rightMargin = rightMargin;
  }


  /**
   * {@inheritDoc}
   * @see org.eclipse.jface.layout.TableColumnLayout#setColumnWidths(org.eclipse.swt.widgets.Scrollable, int[])
   */
  @Override
  protected void setColumnWidths(final Scrollable tableTree, final int [] widths)
  {
    super.setColumnWidths(tableTree, widths);

    // Update the header composite

    final Control [] children = _headerComposite.getChildren();

    final int size = Math.min(widths.length, children.length);

    for (int index = 0; index < size; ++index) {
       final GridData data = (GridData)children[index].getLayoutData();

       int width = widths[index];
       if (index == (size - 1))
         width -= _rightMargin;

       data.widthHint = width; 
     }

    _headerComposite.layout();
  }
}


 类似资料:
  • SWT

    SWT-"Standard Widget Toolkit",它是一个Java平台下开放源码的Native GUI组件库,也是Eclipse平台的UI组件之一。从功能上来说,SWT与AWT/SWING是基本等价的。SWT以方便有效的方式提供了便携式的 (即Write Once,Run Away)带有本地操作系统观感的UI组件: 由于widget系统的固有复杂性以及平台之间微妙的差异,即使在理想情况下

  • 问题内容: 我有一个带有组合框的UI。每次组合将要打开列表时,必须刷新可以选择的项目列表。 有什么办法-即添加一个侦听器,该侦听器将通知UI Combo即将打开? 不幸的是,当列表更改时,我无法观察模型来更新列表。 问题答案: 不幸的是,SWT组件没有这种方法。在Swing中,借助于PopupMenuListener接口将很容易。 我可以想到的一种解决方法是实现MouseListener和Keyb

  • 问题内容: 我到处都在搜索,但是找不到解决方案,也找不到答案。 可以在SWT中将自定义控件/小部件放置在表的列标题中吗? 我可以将这些控件放在第一行,但这不是解决方案,因为滚动。 需求的原因是因为我正在导入CSV文件,但是有时其中的列与以前的顺序不同,因此我想给用户一个选项来设置哪一列适合什么(单选按钮或组合)。 谢谢。 问题答案: 不,你不能。通常,仅当SWT小部件受SWT支持的所有操作系统和窗

  • 问题内容: 您将如何在SWT表中显示大量行?巨大的东西超过20K行20列。不要问我为什么我需要显示这么多数据,这不是重点。关键是如何使其尽可能快地工作,以使最终用户不会感到无聊的等待。每行显示一个对象的实例,列是其属性(某些)。我以为使用JFace内容/标签提供程序模式,但担心它比直接用数据命中表还要慢。它是这样的: 在我的计算机上绘制20k条记录大约需要20秒。我在Windows中看到的最大性能

  • Ribbon 原来出现在 Microsoft Office 2007 的 Word、Excel 和 Powerpoint 組件中,后来也被运用到 Windows 7 的一些附加组件等其它软件中,如画图和写字板。它是一个收藏了命令按钮和图标的面板。它把命令组织成一组"标签",每一组包含了相关的命令。每一个应用程 序都有一个不同的标签组,展示了程序所提供的功能。在每个标签里,各种的相关的选项被组在一起

  • SWT Designer 是一种功能强大且容易使用的基于Eclipse SWT技术的图形用户界面设计工 具,是一个很好的Eclipse的界面开发插件包。利用SWT Designer 的可视化界面,只需采用 拖拉操作,就可以很快地在窗体上创建各种组件,设计出来的窗体和组件的外观和操作系统 平台下其他软件的外观相似,具有本机系统的风格。SWT Designer 可以自动生成Java代码, 利用它的属性