小编leo*_*loy的帖子

JFace/SWT:更改InputDialog中按钮的标签

我想为OK/Cancel按钮创建一个带有自定义标签的InputDialog.我正在使用org.eclipse.jface.dialogs.InputDialog.

我试图覆盖按钮创建方法:

   @Override
   protected void createButtonsForButtonBar(Composite parent) {
    super.createButtonsForButtonBar(parent);
    getButton(IDialogConstants.OK_ID).setText(myOkText);
    getButton(IDialogConstants.CANCEL_ID).setText(myCancelText);
   }
Run Code Online (Sandbox Code Playgroud)

并且它可以工作,但按钮没有调整大小(并且自定义文本结果被裁剪).

我想在这里设置文本为时已晚,因为布局管理器已经确定了按钮大小,并且无法告诉它重新计算......是这样吗?

什么是正确的方法?

swt jface eclipse-rcp

8
推荐指数
1
解决办法
5108
查看次数

sizeof()C结构的一部分 - 排序

我想获取一些C结构中的部分数据,以部分序列化/反序列化它们,将字节从内存写入磁盘,反之亦然.

这些结构事先是未知的,它们是用我自己的C代码生成器(以及将序列化它的代码)动态构建的.可序列化字段将放置在结构的开头.

假设有一个包含4个字段的结构,前两个将被序列化:

typedef struct {
   int8_t x1;   
   int32_t x2;   /* 1 + 4  = 5 bytes (if packed) */
   int8_t y1;
   int32_t  y2;   /* 1 + 4  +1 + 4 = 10 bytes (if packed) */ 
}  st;
Run Code Online (Sandbox Code Playgroud)

我计划抓取指向struct变量的指针,并写入/读取n覆盖这两个第一个字段(x1, x2)的字节.我不认为我需要担心对齐/打包,因为我不打算序列化在不同的编译中存活(只有一个唯一的可执行文件可以读/写数据).而且,由于我的目标是广泛的编译器 - 体系结构,我不想对对齐包装或编译器特定的技巧进行假设.

然后,我需要计算字节数.我不能sizeof(st.x1)+sizeof(st.x2)因为alingment-padding 而这样做.所以,我打算从结构的开头到第一个"非持久"字段减去指针:

st myst;
int partsize = (char*)&myst.y1 - (char*)(&myst);
printf("partial size=%d (total size=%d)\n",partsize,sizeof(myst));  
Run Code Online (Sandbox Code Playgroud)

这似乎有效.它可以放在宏中.

(对于记录:我还尝试编写另一个不需要结构实例的宏,就像这样,但这里似乎不可能 - 但这对我来说并不重要).

我的问题:这是正确和安全的吗?你能看到任何潜在的陷阱,或者更好的方法吗?

除其他外:C标准(和事实上的编译器)是否假设结构域在内存中的顺序与它们在源中定义的顺序相同?这可能是一个愚蠢的问题,但我想确定......

更新:答案中的一些结论和我自己的发现:

  1. 我的方法似乎没有问题.特别是,C规定struct字段永远不会改变顺序.

  2. 也可以(如aswer建议的那样)从最后一个持久字段计数并添加其大小:(char*)&myst.x2 + sizeof(&myst.x2) - (char*)(&myst).这将是等效的,除了它不包括最后一个字段的填充字节(如果存在).一个非常小的优点 …

c struct

8
推荐指数
2
解决办法
1443
查看次数

Psycopg2不喜欢以小写字母开头的表名

我在Windows XP下运行ActiveState的ActivePython 2.6.5.12和PostgreSQL 9.0 Beta 1.

如果我创建一个带有大写首字母的表(即Books),当我运行select语句时,psycopg2会返回"Programming Error:relation"书籍"不存在"错误消息:execute("SELECT * FROM Books").如果我运行,则会返回相同的错误:execute("SELECT * FROM books").但是,如果我将表更改为小写的第一个名称(即书籍),则上述任一语句都可以.

表名是否应该具有小写的名字?这是设置或功能还是错误?我错过了一些明显的东西吗

python sql postgresql

7
推荐指数
2
解决办法
9113
查看次数

如何在Struts 2 OGNL中将参数传递给方法调用

我想使用属性作为对象方法的参数.

<s:property value="orderProductId" />
Run Code Online (Sandbox Code Playgroud)

返回正确的值(例如1)

<s:iterator value="%{order.getProductById(1).activations}">
Run Code Online (Sandbox Code Playgroud)

也给了我正确的价值.但

<s:iterator value="%{order.getProductById(#orderProductId).activations}">
Run Code Online (Sandbox Code Playgroud)

没有.不确定为什么#orderProductId没有正确解释.

java struts2 ognl

7
推荐指数
1
解决办法
1万
查看次数

如何选择"最浅"的匹配后代?

如何选择第一个"最浅"的输入?

我当前的选择将是标记为"已选择"的div.
我不知道会有多少级别.

<div class="selected"> <!-- already have this -->
  <div class="unknown-number-of-wrapper-panels">
    ...
    <div class="collection">    
      <div class="child">
        <input type="text" value="2" /> <!-- don't want this -->
      </div>
    </div>
    <input type="text" value="2" /> <!-- need this -->
    <input type="text" value="2" />
    ...
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

它似乎find().first()给了我最深刻的一个.

编辑清晰.我需要根据它较浅而不是基于其他独特属性的事实来找到它.

这可能就像是反过来的closest()

html javascript jquery jquery-selectors

7
推荐指数
1
解决办法
833
查看次数

脏的EditorPart如何禁止Eclipse重命名其资源?

说我已经定义了自己的TextEditorX extends TextEditor.在典型的Eclipse-RCP场景(标准插件,带有Project Explorer/Navigator的工作台)中,当有人尝试重命名(通过Project Explorer或Navigator)某个编辑器打开的文件时,该行为是:

  • 如果编辑器不是dirty,则允许重命名.之后editor.setInput()将调用,新文件名作为参数.

  • 如果是dirty,则抛出错误("重命名资源":"执行重构时发生致命错误""发现问题:doc.txt未保存").

我的问题:

  • 这个行为定义在哪个级别?我猜这个包org.eclipse.ltk.ui.refactoring.resource是涉及的......但是,假设例如我想要禁止重命名,即使编辑器不是脏的:这种行为是否可以通过编辑器(或文档提供者)中的某些方法来确定,或者应该我编码/扩展一些RenameParticipant

  • 重命名器如何知道doc.txt该编辑器实例打开了资源?它只是检查所有已打开的编辑并询问每个编辑器editorInputdocumentProviders参与其中吗?具体来说,假设我有一个特殊的编辑器,除了"主"文件之外,还依赖于其他资源(多文件输入),并且它希望重命名者在重命名他的任何输入之前询问他.你会如何处理这种情况?

eclipse-plugin eclipse-rcp

7
推荐指数
1
解决办法
666
查看次数

java:maps zoo,选择什么

我是Java World的新手(因为我在C/C++中编写初级).我在我的应用中使用地图.由于java.util.Map是抽象的,我需要实例化它的实现.通常我用的HashMap是:

Map<String, MyClass> x = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

但在Java文档,我发现许多其他的实现,如TreeMap,LinkedHashMap,HashTable,等我想知道我是否可以继续使用盲目的HashMap或有任何重要的差异Map实现.

要点的简要列表就可以了.谢谢.

java hashtable hashmap map linkedhashmap

7
推荐指数
1
解决办法
210
查看次数

在Eclipse SWT/JFace中具有自动完成功能的TextCellEditor?

我想要一个具有标准自动完成行为的TextCellEditor,这是当前任何用户在输入单元格中键入建议字符串列表时所期望的.有关我正在使用的一个很好的工作示例,在Javascript中,请参阅此jQuery自动完成小部件.

我找不到一个很好的例子.我只发现了(除了一些微小的变化)这个TextCellEditorWithContentProposal片段.但这还有很多不足之处:

  • 它列出了所有单词,不管单元格中输入的"部分单词"(没有部分匹配)
  • 选择所需单词后,它将附加到部分单词,而不是替换它
  • 交互是丑陋和不直观的.例如,人们会期望Escape键可以删除建议列表; 再次,请参阅Javascript示例; 在这里,它还删除了键入的字母.

我觉得这样一个标准和有用的组件是不可用的.或者也许它可用?有人能指出我更贴切的片段或例子吗?

eclipse swt textbox jface

7
推荐指数
1
解决办法
298
查看次数

找到两个免费的TCP端口

我理解以下代码可以(可能不是非常有效)在Java中找到一个免费的TCP端口:

  public static int findFreePort() {
    int port;
    try {
      ServerSocket socket= new ServerSocket(0);
      port = socket.getLocalPort();
      socket.close(); 
    } catch (Exception e) { port = -1; }
    return port;    
  } 
Run Code Online (Sandbox Code Playgroud)

(这里有一些相关的问题在SO - 例子).

我不明白的原因是,为什么(或者是否)对这种方法的两次成功调用保证返回两个不同的端口.例如,这里假设(搜索findFreePort方法调用).

它是否正确?

java sockets tcp

6
推荐指数
1
解决办法
6570
查看次数

如何在Eclipse中设置SplashScreen?

我的应用程序将在启动主窗口之前加载splashScreen.如何设置在Eclipse中运行的splashScreen?有一个地方可以在NetBeans中放置"splash:splashScreen.png",以便应用程序从SplashScreen开始.Eclipse中的任何类似的东西>

java eclipse splash-screen

6
推荐指数
1
解决办法
2万
查看次数