有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JFace TableViewer如何设置只显示一行的大小?

我有一个TableViewer,我知道它总是有一行数据。 当我有该表的数据时,我可以调用setInputData(...),并用Arrays.asList(...)传递一个对象,使表的大小正确地显示一行数据

当我没有对象时,我仍然希望表的大小仅显示一行。但是,如果我使用这个:setInputData(new ArrayList<Object>(0)),表的大小会自动调整为3&;半空白行。如何使表格的大小始终只显示一行

我应该提到的是,我正在使用GridLayout来处理TableViewer所在的组合以及TableViewer

我曾尝试在TableViewer中将SWT表的大小设置为单个项目的大小,但这没有帮助。我还没有在SO上或通过谷歌搜索找到任何类似的问题,但是在这个问题上:TableViewer shrinks to a single row with a scroll bar when new input is set,提问者能够让他的表格大小显示一行。不幸的是,我没有足够的代表来评论他是怎么做到的

编辑:添加一些更相关的代码

final ScrolledComposite scrolledComposite = new ScrolledComposite(parentComposite, SWT.V_SCROLL);
scrolledComposite.setLayout(new GridLayout());
scrolledComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
scrolledComposite.setAlwaysShowScrollBars(true);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);

TableViewer tableViewer = new TableViewer(scrolledComposite, SWT.FULL_SELECTION | SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL);
// I'm setting the LabelProvider, ContentProvider here.
GridData gridData = new GridData();
gridData.heightHint = tableViewer.getTable().getItemHeight();
tableViewer.getTable().setLayoutData(gridData);

scrolledComposite.setContent(tableViewer.getControl());
scrolledComposite.setMinSize(tableViewer.getTable().getGridLineWidth(), tableViewer.getTable().getItemHeight());

然后,用另一种方法:

tableViewer.setInputData(objectList); // This may be empty or have exactly one object


共 (2) 个答案

  1. # 1 楼答案

    对于任何在Rüdiger Herrmann的答案基础上寻找解决方案的人来说,最终对我有用的是在Composite内创建TableViewer,然后将其放置在ScrolledComposite内。(这是通过另一个StackOverflow链接发现的,该链接指出Control需要放置在Composite内的ScrolledComposite中,才能正确显示。)然后需要将Composite设置为类似ScrolledComposite的:ScrolledComposite.setContent(Composite)

    在设置两者之后,ScrolledComposite&;从Composite布局到FillLayout&;将ScrolledComposite的大小设置为tableViewer.getTable().computeSize(SWT.DEFAULT, tableViewer.getTable().getItemHeight()),我能够获得TableViewer的正确高度

    完成后,在调用tableViewer.setInput(objectList);之后,我用:tableViewer.getTable().setSize(tableViewer.getTable().computeSize(tableViewer.getTable().getClientArea().width, tableViewer.getTable().getItemHeight()));将大小设置为TableViewer

  2. # 2 楼答案

    您可以查询表来计算一行的大小,如下所示

    Point Site = table.computeSize( SWT.DEFAULT, table.getItemHeight() * 1 );
    

    接下来,您需要告诉布局为表保留那么多空间。例如,在GridLayout中,使用gridData.heightHint