当前位置: 首页 > 知识库问答 >
问题:

当小部件大小更改时,SWT GridLayout列不会调整大小

沈单弓
2023-03-14

我有一个由两列组成的SWT网格布局。一列是一个标签,它应该正好是文本的水平尺寸。另一列是StyledText,它应该占据水平空间的剩余部分。但是,如果标签的大小发生变化(因为文本发生了变化),网格不会调整大小。这导致标签与StyledText重叠。我想要的是网格调整列的大小,这样左边的列变得足够大以容纳更长的文本,而右边的列正好缩小这个量。有几个关于SWT网格布局和在SO上调整大小的问题,但是没有一个能解决问题。标题为SWT GridLayout columns overlap的似乎是一个赢家,除了它并不完全相同,也没有实际的答案。这是一张重叠网格布局的图片

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.graphics.Font;

final class GridOverlap{
  public static void main(String [] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    GridLayout layout = new GridLayout(2, false);

    shell.setLayout(layout);

    Label rows = new Label(shell, SWT.RIGHT);
    rows.setText("1");
    GridData rowsLayoutData = new GridData(SWT.RIGHT, SWT.FILL, false, true);
    rows.setLayoutData(rowsLayoutData);
    
    StyledText editor = new StyledText(shell, SWT.V_SCROLL | SWT.H_SCROLL);
    GridData editorLayoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
    editor.setLayoutData(editorLayoutData);
    editor.setText("Overlapped");

    shell.open();

    // This is where the problem is.
    rows.setText("1000\n999");
    rows.pack();

    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()){
        display.sleep();
      }
    }
    display.dispose();
  }
}

共有1个答案

卢毅
2023-03-14

您需要告诉shell重新计算整个shell的布局,以考虑更改的大小。

使用

shell.layout();

而不是rows.pack()

 类似资料:
  • 已经建立了一个小的测试SWING应用程序,有三个面板。一个主JPanel,包含两个较小的JPanel。一个在左边(板面板),另一个在右边(侧板)。通过调用min、preferred和max size方法,两个内部面板都被设置为请求的特定大小。右面板中的一个按钮将父JFrame设置为not re-sizable。在父帧设置为不可调整大小之前,一切看起来都很好,这会导致(?!)调整框架和主面板的大小,

  • 在tkinter中调整窗口大小时,有没有办法动态调整小部件的大小? 这是代码: 当我调整窗口大小时,窗口小部件的宽度和高度保持不变。 我想要的是根据窗口的大小动态调整窗口小部件的大小。 有没有办法在tkinter中实现这一点? 如果有人能帮我,那就太好了。

  • 问题内容: 我正在尝试为入门者创建一个简单的文字处理器,以更好地学习Python。 我将Tkinter小部件用于主要编辑程序,唯一的问题是 高度 和 宽度 由字符定义。 当我更改字体时,这会产生问题,因为并非所有字体的宽度都相同。 每次更改字体时,“文本”小部件都会重新调整大小,尽管从技术上讲,它的宽度和高度是相同的。尝试输入内容时,这看起来很荒谬,我正在尝试使文字处理器尽可能 好 。 有没有一种

  • 问题内容: 我使用Qt Designer创建了一个简单的UI,并将其转换为Python代码。我搜索了任何方法来检测不断变化的窗口大小。 这是生成的代码: 我发现类似的问题QWidget调整大小信号吗?而本教程将介绍建议重写 QMainWindow的 resizeEvent 方法的大小。 __ 但是他们中的任何一个都不能解决我的问题。是否有任何 调整大小的 功能来检测窗口的大小,如下所示: 问题答案

  • 我使用JFreeChart(1.0.14)中的来显示一些图表。布局由MigLayout处理,所有工作都很好。然而,我不时有奇怪的行为。当图形改变时,面板的最小大小有时也会改变。我不是在代码中设置它,而是将一切都留给Miglayout。 null

  • 我正在尝试构建一个包含6个窗格(作为父级添加到GridPane布局中)的简单Java项目。我必须在开始时设置窗口大小,并通过参考根布局的宽度和高度,设法将它们均匀地拆分。 但我想要他们调整大小,因为我改变了窗口的大小(使用鼠标,现在他们得到固定的大小)。 下面是我的代码: