`
javababy1
  • 浏览: 1220324 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

SWT 在linux下 Combo出现异常

阅读更多
因为同时在suse和windows xp 下开发Eclipse Plug-in.发现一样的代码,在不同的操作系统中的表现也不一样。最后发现是Combo控件的表现不一致。以下是发现问题的代码:
importorg.eclipse.jface.action.Action;
importorg.eclipse.jface.action.ControlContribution;
importorg.eclipse.jface.action.IAction;
importorg.eclipse.jface.action.ToolBarManager;
importorg.eclipse.swt.SWT;
importorg.eclipse.swt.events.ModifyEvent;
importorg.eclipse.swt.events.ModifyListener;
importorg.eclipse.swt.layout.GridData;
importorg.eclipse.swt.layout.GridLayout;
importorg.eclipse.swt.widgets.Combo;
importorg.eclipse.swt.widgets.Composite;
importorg.eclipse.swt.widgets.Control;
importorg.eclipse.swt.widgets.Display;
importorg.eclipse.swt.widgets.Shell;

classComboContributionextendsControlContribution...{

publicComboContribution(Stringid)...{
super(id);
}


@Override
protectedControlcreateControl(Compositeparent)...{
finalCombocombo=newCombo(parent,SWT.NONE);
combo.setItems(
newString[]...{"JurassicPark","E.T.","JAW"});
combo.addModifyListener(
newModifyListener()...{

publicvoidmodifyText(ModifyEvente)...{
Stringtext
=combo.getText();
System.out.println(
"=========="+text);
}

}
);
//combo.addSelectionListener(newSelectionAdapter(){
//publicvoidwidgetSelected(SelectionEvente){
//Stringtext=combo.getText();
//System.out.println("=========="+text);
//}
//});
returncombo;
}

}


publicclassTestToolBar...{

publicTestToolBar(Shellshell)...{
IActionrunAction
=newAction("Run")...{

publicvoidrun()...{

}

}
;

ToolBarManagerbarManager
=newToolBarManager(SWT.NONE);
barManager.add(runAction);

ComboContributioncombo
=newComboContribution("Combo.contribution");
barManager.add(combo);

barManager.createControl(shell);

GridDatagd
=newGridData(GridData.FILL_HORIZONTAL);
barManager.getControl().setLayoutData(gd);
}


/***//**
*DOCqianbingCommentmethod"main".
*
*
@paramargs
*/

publicstaticvoidmain(String[]args)...{
Displaydisplay
=newDisplay();

finalShellshell=newShell(display);
shell.setLayout(
newGridLayout());

newTestToolBar(shell);

shell.setSize(
300,300);
shell.open();
while(!shell.isDisposed())...{
if(!display.readAndDispatch())
display.sleep();
}

display.dispose();
}

}

Combo加入ModifyListener后,在Windows下是使用正常,但是在Suse下,监听器被调用了2次。而且第一次调用取得的Combo.getText()是“”,第二次才正常。严重影响了程序的流程。后来决定使用SelectionListener, 在在Windows下每次选择都会调用监听器,但是在Suse下,只有选择不同的选项,才会调用监听器。因为SWT是调用操作系统本地控件,所以各个操作系统的表现很可能有出入,其可移植性还是有待提高。
分享到:
评论

相关推荐

    SWT3.5.2 Linux下的64位包

    本压缩包"SWT3.5.2 Linux下的64位包"提供了针对64位Linux系统的SWT库,以确保在该平台上运行的Java应用程序能够拥有良好的用户体验。 1. **SWT的介绍**: SWT是一个由Eclipse基金会维护的项目,它允许Java开发者...

    SWT3.5.2 Linux下的32位包

    这个“SWT3.5.2 Linux下的32位包”提供了在32位Linux操作系统上运行SWT应用所需的库和资源。 1. **SWT介绍**: SWT 是一个开源的Java库,它提供了与操作系统直接交互的能力,使得Java开发者可以创建具有高性能和...

    SWT FOR LINUX

    标题"SWT FOR LINUX"表明这个压缩包包含了在Linux环境下使用Eclipse开发SWT应用所需的组件和资源。让我们逐一分析压缩包中的文件: 1. **.classpath**: 这是Eclipse项目的一个配置文件,它定义了项目的类路径,包括...

    swt-3.7.2-gtk-linux-x86_64.zip

    这两个JAR文件包含了与GTK+交互的Java代码,使得Java程序能在Linux环境下使用原生的窗口和控件。 `.project`文件是Eclipse项目的元数据,定义了项目的类型、构建配置、构建命令、Nature(特性)等信息。通过导入这...

    swt linux环境运行jar包

    swt linux环境运行jar包

    SWT需要的jar包,window32和linux64

    在Windows系统下,SWT可以调用Windows API,而在Linux环境下,它可以利用GTK+库来实现GUI。这与Java的标准GUI库Swing相比,Swing是完全跨平台的,但可能在某些情况下无法提供与操作系统完全一致的用户体验。 在这个...

    java SWT ubuntu or linux 工具jar包

    在本案例中,我们关注的是在Ubuntu或Linux环境下使用的SWT库,特别是对于ARM架构64位系统的支持。SWT是Eclipse项目的一部分,因此它在开发基于Eclipse的RCP(Rich Client Platform)应用程序时非常有用。 标题提到...

    org.eclipse.swt.gtk.linux.x86_3.7.0.dist.jar 插件

    org.eclipse.swt.gtk.linux.x86_3.7.0.dist.jar

    SWT combobox 联动菜单

    用eclipse的SWT编写的Combobox控件联动菜单: 将MySql数据库的主分类读入combo中,然后通过判断数据库中ID从而得到相应子分类中的数据,然后将数据读入到subcombo Mysql数据库文件: 主分类表:mcc id MainClass ...

    swt省市级联的绘制,年份的级联

    在SWT中,`Combo`控件通常用来创建下拉列表,而`CCombo`则是一个增强版的`Combo`,它支持文本编辑和下拉列表的结合。在实现省市级联和年份级联的过程中,我们通常会使用`CCombo`,因为它能提供更好的用户体验,允许...

    java界面库swt.jar 4.911

    org.eclipse.swt.gtk.linux.aarch64 org.eclipse.swt.gtk.linux.arm org.eclipse.swt.gtk.linux.ppc64le org.eclipse.swt.gtk.linux.s390 org.eclipse.swt.gtk.linux.s390x org.eclipse.swt.gtk.linux.x86 org....

    swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位

    同时,由于SWT库是高度平台依赖的,因此对于不同的操作系统(如Windows、Linux、Mac OS X)甚至不同版本的操作系统,都有相应的SWT库版本。 在实际开发中,开发者可以使用Eclipse IDE,因为它内置了对SWT的支持,...

    Java swt 实现的文本框 自动匹配数据 演示以及源代码

    在本项目中,我们关注的是如何使用SWT来实现一个具有自动匹配功能的文本框。这个功能常见于许多应用程序中,如搜索引擎、下拉菜单等,它允许用户在输入时自动显示与输入内容相匹配的建议。 在Java SWT中,我们可以...

    SWT源码 swt.jar

    5. 跨平台:虽然SWT依赖于特定操作系统的库,但Eclipse项目提供了多个平台的版本,如Windows、Linux、Mac OS等。 在"swt-3.7.2-win32-win32-x86-source"这个文件名中,我们可以看到SWT的版本号(3.7.2),操作系统...

    SWT的一些jar

    在某些情况下,它可能是一个链接到特定平台的jar文件的符号链接,或者是一个包含了所有平台兼容性的集合。使用时需要根据实际运行环境选择正确的版本。 总的来说,这个压缩包提供了一套SWT的开发和调试资源,涵盖了...

    SWT配置 SWT配置 SWT配置 SWT配置 SWT配置

    通常情况下,该文件名为`swt.jar`,位于安装目录下的相应文件夹中(例如`\ket\pdi-ce-4.0.1-stable\data-integration\libswt\win32`)。 - **验证设置**:确保`swt.jar`已经正确添加到项目的Classpath中。可以通过...

    SWT的简单实例

    SWT提供了与操作系统直接交互的能力,从而可以创建原生外观的应用程序,与Java的另一GUI库AWT或Swing相比,SWT在性能和外观上具有优势。下面我们将深入探讨SWT的简单实例中涉及到的知识点。 首先,我们来看标题中...

    swt工具文档 swt工具文档

    5. **兼容性**: SWT支持多种操作系统,如Windows、Linux、macOS等,为跨平台开发提供了便利。 **使用SWT进行开发** 1. **初始化Display和Shell**: 应用程序开始时,首先创建Display对象,然后创建一个或多个Shell...

    org.eclipse.swt 相关jar包

    org.eclipse.swt 相关jar包,JAVA调用火狐内核制作浏览器教程中所需,供各位下载,可在我的博客中查看详细用法。

    SWT增删改查

    在数据库操作中,必须处理可能出现的错误和异常,如SQL异常、网络异常等。这通常通过`try-catch`块来实现,捕获异常并给出适当的错误提示。 综上所述,"SWT增删改查"项目涉及了SWT GUI设计、JDBC数据库操作、SQL...

Global site tag (gtag.js) - Google Analytics