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

设置Java SWT Shell窗口内部区域的大小

子车飞文
2023-03-14
问题内容

在Java SWT Shell窗口中,如何设置其内部大小而不是其整个窗口框架大小?

例如,如果我使用shell.setSize(300,250),这将使整个窗口显示为恰好为300x250。此300x250包括窗口框架的大小。

如何设置内部尺寸,也就是将Shell窗口的内容显示区域改为300x250?这就是300x250,不包括窗口框架的宽度。

我尝试减去一些偏移值,但问题是不同的操作系统具有不同的窗口框架大小。因此,具有恒定的偏移量将不准确。

谢谢。


问题答案:

从您的问题中,我了解到您想设置的尺寸Client Area。在SWT术语中,其定义为 a rectangle which describes the area of the receiver which is capable of displaying data (that is, not covered by the "trimmings").

您无法直接设置的尺寸,Client Area因为没有API。虽然您可以通过一点技巧来实现。在下面的html" target="_blank">示例代码中,我希望我的客户区域是 300 by 250 。为此,我使用了shell.addShellListener()事件监听器。当外壳完全处于活动状态时(请参阅参考资料 public void shellActivated(ShellEvent e)
),我将计算出不同的边距,然后再次设置外壳的大小。外壳尺寸的计算和重置为我提供了所需的外壳尺寸。

>>Code:

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.events.ShellListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;

public class MenuTest {

    public static void main (String [] args) 
    {
        Display display = new Display ();
        final Shell shell = new Shell (display);

        GridLayout layout = new GridLayout();
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        layout.horizontalSpacing = 0;
        layout.verticalSpacing = 0;
        layout.numColumns = 1;
        shell.setLayout(layout);
        shell.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,true));
        final Menu bar = new Menu (shell, SWT.BAR);
        shell.setMenuBar (bar);

        shell.addShellListener(new ShellListener() {

            public void shellIconified(ShellEvent e) {
            }
            public void shellDeiconified(ShellEvent e) {
            }
            public void shellDeactivated(ShellEvent e) {
            }
            public void shellClosed(ShellEvent e) {
                System.out.println("Client Area: " + shell.getClientArea());
            }
            public void shellActivated(ShellEvent e) {
                int frameX = shell.getSize().x - shell.getClientArea().width;
                int frameY = shell.getSize().y - shell.getClientArea().height;
                shell.setSize(300 + frameX, 250 + frameY);
            }
        });

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


 类似资料:
  • 问题内容: 我正在尝试使JFrame的可用内容区域恰好为500x500。如果我这样做 …我得到一个全尺寸为500x500的窗口(包括标题栏等),在这里,我确实需要一个尺寸约为504x520的窗口来说明窗口边框和标题栏。我该如何实现? 问题答案: 您可以尝试以下几种方法:1-骇客: 2或将JPanel添加到框架的内容窗格中,然后只需将JPanel的首选/最小尺寸设置为500X500,请调用pack(

  • 我正在尝试为KendoDropDownList设置下拉窗口的宽度。使用以下代码: 下拉列表显示并且是KendoDropDownList。所以我知道调用var ddl=$(“#dropdownlist”)。kendoDropDownList()正在工作。但是,我在调用kendoDDL时遇到一个异常。列表宽度(400)。 0x800a138f-JavaScript运行时错误:无法获取未定义或空引用的属

  • 当用户关闭一个程序时,我想保存一些关于主窗口的信息,以便下次用户打开程序时,窗口具有相同的属性。 这对于窗口是否最大化很容易做到: 得到:舞台。isMaximized() 场景:舞台。setMaximized(布尔最大化) 如果窗口没有最大化,这也很容易做到: 得到:舞台。getX()/stage。getY()/舞台。getWidth()/stage。getHeight() 场景:舞台。setX(

  • 我想强制我的Symfony 2.5应用程序的区域设置为。我希望这个区域设置用于strftime()函数。 我的: 我正在我的一个控制器中使用以下代码来调试: 当这样执行时,它显示:。 但是,当第一行未注释时,它会显示:,因此区域设置已安装在系统中并正常工作。 我如何使Symfony始终使用配置中指定的语言环境? $locale-a:

  • 如果你必须定期在服务器上进行维护工作,你可能需要在维护期间暂停监控并停止接收来自 Navicat Monitor 的警报。Navicat Monitor 可让你设置维护窗口时间段以禁用监控选择的实例。在此期间,Navicat Monitor 不会发出警报,也不会发送通知。若要设置实例的维护窗口,请前往“配置”->“全部实例”。 【注意】你也可以手动暂停单个实例的监控。请参阅暂停监控一个实例。 设置

  • 以下用于调整selenium chrome窗口大小的代码无效: 其输出为: 我也尝试过使用选项来设置驱动程序创建时的窗口大小(以及许多其他事情,如下面的注释),但也无法使其工作: 我使用selenium 3.14.0,铬驱动程序版本72.0.3626.109并在后台/无头模式下运行:我实际上需要在后台运行我的代码,这意味着它会在后台自动启动。我认为无头和背景有细微的区别,无头和背景在启动时与特定用