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 应用程序自定义工具栏 的相关文章

  • 我在socket上设置了超时,发现这个值不能大于21

    我在socket上设置了超时 该值小于21秒才有效 21秒后发现超时还是21秒 public static void main String args SimpleDateFormat sdf new SimpleDateFormat yy
  • Hashmap并发问题

    我有一个哈希图 出于速度原因 我希望不需要锁定 假设我不介意过时的数据 同时更新它和访问它会导致任何问题吗 我的访问是获取 而不是迭代 删除是更新的一部分 是的 这会导致重大问题 一个例子是向散列映射添加值时可能发生的情况 这可能会导致表重
  • Google App Engine with Java - 运行 javac.exe 编译器时出错

    在 Windows XP 上 刚刚下载并解压谷歌应用程序引擎java sdk to C Program Files appengine java sdk 我已经安装了jdk C Program Files Java jdk1 6 0 20
  • URL.setURLStreamHandlerFactory

    我正在使用带有嵌入式 Jetty 的可执行 jar 开发一个 Web 应用程序 我的jar包含一个依赖jar jar in jar 我参考了JarRsrcLoader and RsrcURLStreamHandlerFactory由 Ecl
  • 解决 Java Checkstyle 错误:名称 'logger' 必须匹配模式 '^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$'

    使用 Eclipse Checkstyle 插件我看到以下错误 名称 logger 必须匹配模式 A Z A Z0 9 A Z0 9 我通过更改解决了此错误 private static final Logger logger Logger
  • 在哪里可以获得有关 Java FitNesse 和 Slim 的一些教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 正则表达式获取字符串中的第一个数字和其他字符

    我是正则表达式的新手 想知道如何才能只获取字符串中的第一个数字 例如100 2011 10 20 14 28 55 在这种情况下 我希望它返回100 但该数字也可以更短或更长 我在想类似的事情 0 9 但它单独获取每个数字 100 2001
  • 如何拦截 REST 端点以接收所有标头?

    我当前的代码是 Path login RequestScoped public class LoginResource GET SecurityChecked public Response getUser HeaderParam AUTH
  • 有什么所谓的 GUI 标准吗?

    GUI 是大多数软件产品的重要领域之一 我想知道是否有一个叫做 GUI 标准的东西 它定义了 GUI 设计的最佳实践 但很深入 例如 有任何定义包含文本框的最佳大小或 Windows 窗体的宽度和高度之间的比率 只是为了给用户提供最大的便利
  • Java Microsoft Excel API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 有多少种方法可以将位图转换为字符串,反之亦然?

    在我的应用程序中 我想以字符串的形式将位图图像发送到服务器 我想知道有多少种方法可以将位图转换为字符串 现在我使用 Base64 格式进行编码和解码 它需要更多的内存 是否有其他可能性以不同的方式做同样的事情 从而消耗更少的内存 现在我正在
  • JFace ColumnWeigthData 导致父级增长

    我有一个 Eclipse RCP 应用程序 并且想要在TableViewer using ColumnWeigthData as ColumnLayoutData 问题是父表单 ScrolledForm在示例代码中 每当我布局表格时都会增加
  • 从 @JsonProperty 值获取枚举常量

    我有一个标有 JsonProperty 的枚举 用于使用 Jackson 进行 JSON 序列化 反序列化 并且希望获取给定字符串 JsonProperty 的枚举值 public enum TimeBucket JsonProperty
  • 发生错误。请参阅日志文件 - eclipse juno

    每当我启动 Eclipse Juno 时 都会出现错误 发生错误 请查看日志文件 C Program Files eclipse configuration 1362989254411 log 有的网站说卸载jdk重新安装 我这样做了 但没
  • 当您在数组列表上调用remove(object o)时,它如何比较对象?

    当您在 java 中的数组列表上调用remove object o 时 它如何比较对象以找到要删除的正确对象 它使用指针吗 或者它使用 Comparable 接口来比较对象吗 ArrayList remove 依赖于对象的实现Equal方法
  • 使用 JAD 反编译 java - 限制

    我正在尝试使用 Java 中的 JAD 反编译几个 jar 文件 我也尝试过 JD GUI 但运气更差 但出现了很多错误 一种类型 易于修复 似乎是内部类 但我也发现了这段代码 static int SWITCH TABLE atp com
  • 对于当前月份和日期但年份不同的日期,经过的月份计算未给出正确的结果

    我正在尝试计算自特定日期以来经过的月份 该函数工作正常 尽管如果我将今天的日期与过去的不同年份放在一起 它会给我一个月的差异 不到一个月 假设对于所有日期 该函数都运行良好 除了 如果今天是 2014 03 06 YYYY MM DD 并且
  • 防止Java实例化的正确方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在不同版本的Google App Engine中使用自定义域名?

    我使用谷歌应用程序引擎作为我的 Android 和 Web 应用程序的服务器 我使用 Android Studio 开发了 Android 应用程序 并使用 Eclipse 开发了 Web 应用程序 我在应用程序引擎中部署了两个版本 第一个
  • 如何捕获 try-with-resource 语句中 close 方法抛出的异常

    我正在读关于try with resourceJava 中的语句可用于指定任意数量的资源 try Resource1 res1 initialize code Resource1 res2 initialize code statement

随机推荐

  • 在 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