Eclipse RCP 应用程序自定义工具栏

2024-02-01

我正在为我的 RCP 应用程序创建一个自定义工具栏。

  1. 如图所示,我想要一个带有其他三个文本框的下拉框。这些基本上都是输入框并且是相互依赖的。现在,每个盒子都属于不同的类。我想将它们集中在一个类中,以便更轻松地为彼此创建侦听器。

    protected void fillCoolBar(ICoolBarManager coolBar) {
    
    IToolBarManager toolbar = new ToolBarManager(coolBar.getStyle());
    coolBar.add(toolbar);      
    
    Toolbar extraToolBar = new Toolbar("Toolbar");
    toolbar.add(extraToolBar);
    toolbar.add(new Separator());
    
    toolbar.add(new MyCombo("Demo Combo box"));
    toolbar.add(new Separator());
    
    toolbar.add(new IPaddress("Ip"));
    toolbar.add(new Separator());
    
    toolbar.add(new Mask("Mask"));
    toolbar.add(new Separator());
    
    toolbar.add(new Count("Count"));
    
    }
    
    public class IPaddress extends ControlContribution {
    
     Text textBox;
    
    
     public IPaddress(String id) {
         super(id);
        // TODO Auto-generated constructor stub
     }
    
     @Override
     protected Control createControl(Composite parent) {
    textBox = new Text(parent, SWT.MULTI | SWT.BORDER | SWT.WRAP);
    textBox.setLayoutData(new GridData(GridData.FILL_BOTH));
    textBox.addModifyListener(new ModifyListener(){
        public void modifyText(ModifyEvent event) {
            Text text = (Text) event.widget;
            System.out.println(text.getText());
        } 
    });
    return textBox;
    }
    
    }
    
  2. 因此,我想创建一个新的自定义工具栏,其中包含我想要的所有功能,然后将其粘贴到原始工具栏上。但不知何故,它只在左侧显示一个空栏。

    protected Control createControl(Composite parent) {
    toolBar = new ToolBar(parent, SWT.FLAT |SWT.BORDER);
    
    Device dev = toolBar.getDisplay();
    
    try {
        newi = new Image(dev, "C:\\Users\\RahmanAs\\ChipcoachWorkspace\\ChipCoach\\icons\\FileClose.png");
        opei = new Image(dev, "C:\\Users\\RahmanAs\\ChipcoachWorkspace\\ChipCoach\\icons\\FileOpen.png");
    
    
    } catch (Exception e) {
        System.out.println("Cannot load images");
        System.out.println(e.getMessage());
        System.exit(1);
    }
    
    
    ToolItem item0 = new ToolItem (toolBar, SWT.PUSH);
    item0.setImage(newi);
    item0.setText("Hello");
    
    ToolItem item1 = new ToolItem(toolBar, SWT.PUSH);
    item1.setText("Push");
    
    ToolItem item2 = new ToolItem(toolBar, SWT.PUSH);
    item2.setText("Pull");
    
    
    return toolBar;
    
    
    }
    
  3. 我还有运行按钮,这是我使用 Vogella 的教程在插件中创建的。但我不能用这种方式来安排他们的位置。 (例如,如果我一开始就想要它们。)有没有办法以编程方式创建它们?


我认为你最左边的原因ToolBar为空是布局问题。在我下面的代码中,我有一个类似的“空”ToolBar当我没有任何按钮位于外部时出现问题custom ToolBar但仍处于main ToolBar。添加“foo”和“bar”按钮修复了布局问题,但我无法找出正确的调用layout() or pack()要解决这个问题。我认为这可能与这里的错误 https://bugs.eclipse.org/bugs/show_bug.cgi?id=123205.

我尝试创建一个类似的ToolBar并围绕“RCP 邮件模板”插件项目构建,您可以从“新建插件项目”向导创建该项目。

为了解决您的前两个问题,我在示例 RCP 包中创建了 3 个包(我将我的项目称为“com.bar.foo”):

  1. com.bar.foo.actions- 包含扩展的类ContributionControl并包裹Combo and Text小部件。这些与数据模型无关,只需担心创建小部件。
  2. com.bar.foo.model- 包含数据模型。我只是在这里建立了一个简单的模型,其中包含 IP、掩码、网关和一两个有用的方法。
  3. com.bar.foo.toolBar- 这些类已插入主 UIToolBar通过org.eclipse.ui.menus扩展点。他们将数据模型链接到ContributionControls在第一个包中。这里最重要的类是ToolBarContribution,这有效地集中了所有听众。这使您可以更轻松地将小部​​件的侦听器链接到同一模型。

这是该的来源ToolBarContribution(请注意,它解决了您的前两个问题,因为它将侦听器连接到模型and提供自己的ToolBar到用户界面):

package com.bar.foo.toolBar;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.ui.menus.WorkbenchWindowControlContribution;

import com.bar.foo.actions.ComboContributionItem;
import com.bar.foo.actions.TextContributionItem;
import com.bar.foo.model.NetworkConfig;

public class ToolBarContribution extends WorkbenchWindowControlContribution {

    // Our data model.
    private NetworkConfig configuration = new NetworkConfig();

    // Each of these corresponds to a widget in the ToolBar.
    private Action scanAction;
    private ComboContributionItem sourceCombo;
    private TextContributionItem ipText;
    private TextContributionItem maskText;
    private TextContributionItem gatewayText;

    @Override
    protected Control createControl(Composite parent) {

        setupContributionItems();

        // Let's not get our hands messy with SWT... add IActions or
        // IContributionItems to a ToolBarManager and let the ToolBarManager
        // create the SWT ToolBar.
        ToolBarManager manager = new ToolBarManager();
        manager.add(scanAction);
        manager.add(sourceCombo);
        manager.add(ipText);
        manager.add(maskText);
        manager.add(gatewayText);

        ToolBar toolBar = manager.createControl(parent);

        // Highlight the ToolBar in red.
        toolBar.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_RED));

        return toolBar;
    }

    private void setupContributionItems() {
        scanAction = new Action("Scan Host") {
            @Override
            public void run() {
                System.out.println("Scanning...");
                String host = sourceCombo.getComboControl().getText();
                configuration.scanHost(host);
                System.out.println("Scanned!");
                refreshTexts();
            }
        };
        scanAction.setToolTipText("Scans the host for a configuration.");

        final SelectionListener comboListener = new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                ipText.getTextControl().setText("");
                maskText.getTextControl().setText("");
                gatewayText.getTextControl().setText("");
            }
        };
        sourceCombo = new ComboContributionItem("sourceCombo") {
            @Override
            public Control createControl(Composite parent) {
                // Let ComboContributionItem create the initial control.
                Control control = super.createControl(parent);
                // Now customize the Combo widget.
                Combo combo = getComboControl();
                combo.setItems(configuration.getAvailableHosts());
                combo.addSelectionListener(comboListener);
                // Return the default control.
                return control;
            }
        };

        ipText = new TextContributionItem("ipText", SWT.BORDER | SWT.SINGLE
                | SWT.READ_ONLY);
        maskText = new TextContributionItem("maskText");
        gatewayText = new TextContributionItem("gatewayText");
    }

    private void refreshTexts() {
        ipText.getTextControl().setText(configuration.getIP());
        maskText.getTextControl().setText(configuration.getMask());
        gatewayText.getTextControl().setText(configuration.getGateway());
    }
}

除此之外ToolBar,我有两个单独的按钮main UI ToolBar,一个在之前,一个在之后custom ToolBar。它们的来源位于 com.bar.foo.toolBar 包中。这是第一个命令:

package com.bar.foo.toolBar;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;

public class FooHandler extends AbstractHandler {
    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {
        System.out.println("foo");
        return null;
    }
}

这是第二个:

package com.bar.foo.toolBar;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;

public class BarHandler extends AbstractHandler {
    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {
        System.out.println("bar");
        return null;
    }
}

由于我对您的数据了解不多,因此我必须创建自己的模型。 com.bar.foo.model 包中的模型只是一个类:

package com.bar.foo.model;

public class NetworkConfig {

    private String ip = "";
    private String mask = "";
    private String gateway = "";

    public String[] getAvailableHosts() {
        return new String[] { "fooHost" };
    }

    public void scanHost(String host) { 
        if ("fooHost".equals(host)) {
            ip = "192.168.1.2";
            mask = "255.255.255.0";
            gateway = "192.168.1.1";    
        } else {
            ip = "";
            mask = "";
            gateway = "";
        }
    }

    public String getIP() {
        return ip;
    }
    public String getMask() {
        return mask;
    }   
    public String getGateway() {
        return gateway;
    }   
}

现在对于包含以下内容的 com.bar.foo.actions 包ControlContributions符合习俗的ToolBar。注意这两个类都与模型无关,并且它们可以在您产品的其他地方重复使用。

第一类只是包装一个Combo小部件。该小部件最初可以通过覆盖controlCreated(Combo)方法。我用它在ToolBarContribution类添加一个SelectionListener并设置Combo的物品。这是课程:

package com.bar.foo.actions;

import org.eclipse.jface.action.ControlContribution;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;

public class ComboContributionItem extends ControlContribution {

    private Combo combo;

    public ComboContributionItem(String id) {
        super(id);
    }

    @Override
    protected Control createControl(Composite parent) {
        combo = new Combo(parent, SWT.READ_ONLY | SWT.V_SCROLL | SWT.H_SCROLL);
        return combo;
    }

    @Override
    public int computeWidth(Control control) {
        // The widget is now 100 pixels. You can new GC gc = new GC(control) and
        // use the gc.stringExtent(String) method to help compute a more dynamic
        // width.
        return 100;
    }

    public Combo getComboControl() {
        return combo;
    }
}

这个包中的另一个类包装了一个Text widget:

package com.bar.foo.actions;

import org.eclipse.jface.action.ControlContribution;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;

public class TextContributionItem extends ControlContribution {

    private final int style;
    private Text text;

    public TextContributionItem(String id) {
        this(id, SWT.BORDER | SWT.SINGLE);
    }

    public TextContributionItem(String id, int style) {
        super(id);
        this.style = style;
    }

    @Override
    protected Control createControl(Composite parent) {
        text = new Text(parent, style);
        return text;
    }

    @Override
    public int computeWidth(Control control) {
        return 100;
    }

    public Text getTextControl() {
        return text;
    }
}

我没有这样做,但如果你需要进一步定制Text小部件为您ToolBar,您可以覆盖createControl(Composite)方法就像我初始化时所做的那样ComboContributionItem.

现在最后一件事:我使用扩展来自定义ToolBar。然而,同样的逻辑被ToolBarContribution适用于您的fillCoolBar(ICoolBarManager)方法或你的createControl(Composite)方法,取决于哪种ToolBar你最终希望修改。

就我而言,这是我添加到插件末尾的内容plugin.xml:

<extension
      point="org.eclipse.ui.menus">
   <menuContribution
         locationURI="toolbar:org.eclipse.ui.main.toolbar">
      <toolbar
            id="com.bar.foo.toolbar">
         <command
               commandId="com.bar.foo.commands.foo"
               label="Foo"
               style="push">
         </command>
         <control
               class="com.bar.foo.toolBar.ToolBarContribution">
         </control>
         <command
               commandId="com.bar.foo.commands.bar"
               label="Bar"
               style="push">
         </command>
      </toolbar>
   </menuContribution>
</extension>
<extension
      point="org.eclipse.ui.commands">
   <command
         id="com.bar.foo.commands.foo"
         name="Foo">
   </command>
   <command
         id="com.bar.foo.commands.bar"
         name="Bar">
   </command>
</extension>
<extension
      point="org.eclipse.ui.handlers">
   <handler
         class="com.bar.foo.toolBar.FooHandler"
         commandId="com.bar.foo.commands.foo">
   </handler>
   <handler
         class="com.bar.foo.toolBar.BarHandler"
         commandId="com.bar.foo.commands.bar">
   </handler>
</extension>

这些命令已连接起来,因此有一个按钮FooHandler之前custom ToolBar和一个按钮BarHandler之后custom ToolBar。这些命令在 xml 中指定的顺序将反映在应用程序中。同样,项目添加到的顺序custom ToolBar将反映在您的产品中。

关于放置的另一个注意事项:您可以通过在 locationURI 的查询中设置放置位置来使 menuContributions 出现在不同的位置,例如,toolbar:org.eclipse.ui.main.toolbar?after=additions。 “before”是另一个类似于“after”的展示位置关键字。可以找到更多这方面的例子在这个 Eclipse 帮助文档中 http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fworkbench_cmd_menus.htm.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Eclipse RCP 应用程序自定义工具栏 的相关文章

  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo

随机推荐

  • 在 iOS 中的 Safari 中打开本地 PDF

    假设 myURL 指向通过执行以下操作获得的 PDF myURL NSBundle mainBundle URLForResource my withExtension PDF 我可以调用 UIApplication sharedAppli
  • Python 析构函数未调用

    任何人都知道如何让我的析构函数在对象销毁时调用 def del self os unlink self pidfile 场景 有一个运行进程的守护进程 守护进程收到一个 SIGTERM 并立即向 Process 发送一个 SIGTERM 进
  • ubuntu下安装pycairo

    由于某种原因 我无法让 python 找到开罗 当我执行 waf 配置时 我得到了 Setting top to home user pycairo py2cairo 1 10 0 Setting out to home user pyca
  • 如何验证文本区域中的模式匹配?

    当我在 javascript 中使用 textarea checkValidity 或 textarea validity valid 且值无效时 这两个总是返回 true 我做错了什么
  • 如何在 Android 应用程序中将图像上传到 FTP 服务器?

    是否可以将图像从我的 Android 应用程序上传到 FTP 服务器 该图像已经使用相机捕获 在桌面应用程序中 我们使用 FTP 客户端将任何文件 图像上传到实时服务器 我们如何在 Android 应用程序中做类似的事情 使用这个对我来说效
  • 在蓝牙打印机上打印

    我需要在蓝牙打印机上打印 我已经有一个用于 Windows 移动平台的程序 它通过蓝牙将命令和数据发送到斑马 RW 420 打印机 http www zebra com id zebra na en index products print
  • 如何使用 Spring 的 @Cacheable 和 Aerospike 作为缓存?

    我只想用Aerospike作为后备缓存Spring CacheManager 当我不打算使用时我应该使用 spring data aerospikeAerospike作为数据存储但仅作为缓存 有没有类似的实现HazelcastCacheMa
  • 使用 .NET Core(API 和 HTTP)创建 Azure AD 应用程序和服务主体

    继续我以编程方式创建 Azure 应用程序的探索 这从https stackoverflow com a 44753728 1332416 https stackoverflow com a 44753728 1332416 我的核心获得了
  • 所有 C# 转换都会导致装箱/拆箱吗

    我很想知道 C 中的所有强制转换是否都会导致装箱 如果不是 那么所有强制转换都是成 本高昂的操作吗 示例取自装箱和拆箱 C 编程指南 http msdn microsoft com en us library yz2be5wk aspx i
  • 可以从纯虚函数返回引用吗?

    class I public virtual std wstring const GetName const 0 通常 实现此接口的客户端将其名称包含在其主体中 一切都很好 但有时 GetName 的结果是在函数执行期间计算的 使用静态变量
  • Angular2 中使用 [attr.attributeName] 和 [attributeName] 绑定属性之间的区别

    我是 Angular2 的新手 当 iam 绑定属性时 我通常按以下方式进行操作 示例1
  • 如何以编程方式判断系统是 R/3 还是 S/4

    是否可以通过代码判断当前系统是R 3还是S 4 我需要它 因为我有一个返回人力资源相关数据的软件组件的方法 但这个组件应该与R 3和S 4系统不同 DATA lv software component mo configuration gt
  • 如何解决 ASP.NET Web API 中的连接超时过期问题?

    我使用 ASP NET Web API 从数据库中检索大量数据作为 json 数据列表 但在浏览器控制台中收到此错误 Failed to load resource the server responded with a status of
  • 以编程方式更改数据库连接

    在 Oracle SQL Developer 中 我需要手动切换活动数据库连接 假设登录凭据已保存 是否有一个命令可以以编程方式连接到不同的数据库 我试图避免单击窗口右上角的下拉菜单来选择活动连接 也许我应该宁愿每个数据库有一个 SQL 文
  • 使用PHPUnit测试cookie和session,如何?

    使用 PHPUnit 可以很容易地测试原始 PHP 代码 但是严重依赖 cookie 的代码又如何呢 会议可能是一个很好的例子 有没有不需要我设置的方法 COOKIE测试期间的数据 这感觉像是一种很古怪的做事方式 这是代码的常见问题 尤其是
  • 如何用Scrapy爬取整个网站?

    我无法抓取整个网站 Scrapy 只能抓取表面 我想抓取得更深 过去 5 6 个小时一直在谷歌搜索 但没有任何帮助 我的代码如下 from scrapy contrib spiders import CrawlSpider Rule fro
  • 如何从Struts1中的url中删除'.do'前缀?

    我在 Struts 1 框架中编写了一个 Web 应用程序 一切正常 但在表单提交时 当用户转发到显示的下一页 URL 时actionname do 我不希望 URL 上有这个 Struts 1 默认后缀 相反 我想在 URL 中看到页面的
  • 横向打印图像?

    我正在将控件转换为位图并打印它 using MemoryStream ms new MemoryStream chart1 SaveImage ms ChartImageFormat Bmp Bitmap bm new Bitmap ms
  • Django 无法加载模块“debug_toolbar”:没有名为“debug_toolbar”的模块

    当我尝试运行该项目时 Django 由于某种原因无法加载 django debug toolbar 插件 错误消息说 web 1 ModuleNotFoundError No module named debug toolbar 这是我的设
  • Eclipse RCP 应用程序自定义工具栏

    我正在为我的 RCP 应用程序创建一个自定义工具栏 如图所示 我想要一个带有其他三个文本框的下拉框 这些基本上都是输入框并且是相互依赖的 现在 每个盒子都属于不同的类 我想将它们集中在一个类中 以便更轻松地为彼此创建侦听器 protecte