【问题标题】:How to set size of TopComponent programmatically?如何以编程方式设置 TopComponent 的大小?
【发布时间】:2015-10-25 22:44:48
【问题描述】:

如何以编程方式使用Netbeans Platform Application 设置在编辑器模式下打开的TopComponent 窗口的大小?我已经在构造函数中尝试了setSize(500,500),但它不起作用。

【问题讨论】:

    标签: java netbeans-platform


    【解决方案1】:

    我不确定这是否会有所帮助,但模块可以包含对 layer.xml 中设置的更改,以更改模式起始位置的大小/位置。您的顶级组件将停靠在其中一种模式下,因此更改其大小应该会更改您的顶级组件大小。

    例如你模块中的 layer.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd">
    <filesystem>
        <folder name="Windows2">
            <folder name="Modes">
                <file name="editor.wsmode" url="modesettings.xml"/>
            </folder>
        </folder>
    </filesystem>
    

    这指向同一目录中的modesettings.xml。

    <?xml version="1.0" encoding="UTF-8"?>
    <mode version="2.4">
        <module name="org.netbeans.core.ui/1" spec="1.2"/>
        <name unique="editor"/>
        <kind type="view"/>
        <state type="separated"/>
        <constraints>
            <path orientation="horizontal" number="20" weight="0.3"/>
            <path orientation="vertical" number="20" weight="0.5"/>
        </constraints>
        <bounds x="137" y="192" width="660" height="200"/>
        <frame state="0"/>
        <empty-behavior permanent="true"/>
    </mode>
    

    您还可以在启动时更改模式边界,如下所示:

    @OnShowing
    public class ModeBoundsSetter implements Runnable {
    
        @Override
        public void run() {
            WindowManager wm = WindowManager.getDefault();
            Mode mode = wm.findMode("editor");
            if(null != mode) {
                mode.setBounds(new Rectangle(0,0,2000,100));
            }
        }
    }
    

    【讨论】:

    • Tks,但它不起作用。在我的 layer.xml 文件中, 节点没有子节点。我还查找了 xml 层中的每个文件,但没有找到像您的 modesettings.xml 文件这样的文件。我正在尝试像您在第三个代码块 sn-p 中所说的那样做,但它也不起作用。窗口始终保持相同的大小。
    • 如果您的 layer.xml 没有子节点,您需要像我一样添加它们。你没有 modesettings.xml 并不奇怪,因为我只是编了这个名字。您可以为 modesettings.xml 选择任何您想要的名称。它只需要匹配,因此 layer.xml 文件会告诉它查看 modesettings.xml 或您命名的任何内容。对于第三个块,您需要在带有 @OnShowing 注释的可运行公共类中运行它。
    • 我将@OnShowing注解放在TopComponent类声明之前,并在同一个类中实现了Runnable接口。我在run() 中放入了相同的sn-p 代码,它甚至没有工作。我将尝试在我的 layer.xml 中添加子节点,并在您所说的同一目录中创建一个 xml。然后我会在一分钟内发布结果。
    • 它可能需要清理和构建以避免使用上次运行的缓存状态。
    • 第一次出现时确实有效。停靠并再次浮动后,它忽略了xml文件中设置的大小和位置的变化。
    猜你喜欢
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多