还是不行啊,请尝试重写keyHandler里的query和其他方法来实现我的需求,需求是不管输入什么东西,都不会影响选中
时间: 2024-02-11 07:08:37 浏览: 23
好的,如果您希望无论用户输入什么内容都不会影响选中的话,可以对 `keyHandler` 中的 `query` 方法进行修改,不再使用用户输入的值作为查询条件,而是直接返回一个空字符串。同时,需要对 `select` 方法进行修改,使其一直返回当前选中的值。
以下是修改后的代码:
```
$('#combobox').combobox({
keyHandler: {
query: function(q){
return '';
}
},
onSelect: function(record){
$('#combobox').combobox('setValue', record.value);
}
});
```
这段代码的实现思路是,在 `keyHandler` 中的 `query` 方法中直接返回空字符串,使得用户输入的任何内容都不会影响选中。在 `onSelect` 中,每次选择选项时都将选中的值设置为当前选中的值,保证选中不受用户输入的影响。
希望这次的修改能够满足您的需求。
相关问题
eclipse中,gef组件怎么在editpart中实现鼠标悬浮提示信息,selectionHandlesEditPolicy是什么作用,可以用于鼠标悬浮提示吗?如果可以怎么用
要在GEF EditPart中实现鼠标悬浮提示信息,可以使用EditPartViewer的ToolTipHelper对象。具体来说,可以在EditPart中重写getAdapter()方法,返回IEditPartViewer的适配器,然后在适配器中实现ToolTipHelper对象的创建与配置。例如:
```java
@Override
public Object getAdapter(Class adapter) {
if (adapter == IEditPartViewer.class) {
return new IEditPartViewer() {
private ToolTipHelper toolTipHelper;
@Override
public Control getControl() {
return getViewer().getControl();
}
@Override
public void setEditDomain(EditDomain domain) {
// do nothing
}
@Override
public void setKeyHandler(KeyHandler handler) {
// do nothing
}
@Override
public void setSelectionManager(SelectionManager manager) {
// do nothing
}
@Override
public void setToolTipHelper(ToolTipHelper helper) {
toolTipHelper = helper;
}
@Override
public ToolTipHelper getToolTipHelper() {
if (toolTipHelper == null) {
toolTipHelper = new ToolTipHelper(getViewer().getControl());
toolTipHelper.activate();
}
return toolTipHelper;
}
};
}
return super.getAdapter(adapter);
}
```
SelectionHandlesEditPolicy是一个GEF的EditPolicy,用于控制选中EditPart时显示的handles。它本身不提供鼠标悬浮提示的功能,但可以通过重写它的getToolTipRequest()方法来实现。例如:
```java
public class MySelectionHandlesEditPolicy extends SelectionHandlesEditPolicy {
@Override
protected Request createTargetRequest() {
return new SelectionRequest(RequestConstants.REQ_SELECTION_HOVER);
}
@Override
protected void showTargetFeedback(Request request) {
if (request.getType() == RequestConstants.REQ_SELECTION_HOVER) {
// show tooltip
String tooltipText = "This is a tooltip";
getHostFigure().setToolTip(new Label(tooltipText));
} else {
super.showTargetFeedback(request);
}
}
@Override
protected void eraseTargetFeedback(Request request) {
if (request.getType() == RequestConstants.REQ_SELECTION_HOVER) {
// hide tooltip
getHostFigure().setToolTip(null);
} else {
super.eraseTargetFeedback(request);
}
}
}
```
然后在EditPart的createEditPolicies()方法中添加该EditPolicy即可:
```java
@Override
protected void createEditPolicies() {
super.createEditPolicies();
installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new MySelectionHandlesEditPolicy());
}
```
eclipse中,在ViewPart中画的ScrollingGraphicalViewer怎么实现缩放,以及拖动Viewpart时如何通知ScrollingGraphicalViewer的内容重新布局使其一直居中
要实现ScrollingGraphicalViewer的缩放,你需要使用ZoomManager。以下是一个简单的示例代码:
```java
ScrollingGraphicalViewer viewer = new ScrollingGraphicalViewer();
ZoomManager zoomManager = new ZoomManager(viewer.getRootEditPart().getZoomManager(), viewer.getViewport());
zoomManager.setZoomLevels(new double[] { 0.1, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 2.0, 3.0, 4.0, 5.0 });
zoomManager.setZoomLevelContributions(Arrays.asList(ZoomManager.FIT_ALL, ZoomManager.FIT_HEIGHT, ZoomManager.FIT_WIDTH));
viewer.setProperty(MouseWheelHandler.KeyGenerator.getKey(SWT.MOD1), MouseWheelZoomHandler.SINGLETON);
viewer.setEditDomain(new DefaultEditDomain(null));
viewer.setKeyHandler(new GraphicalViewerKeyHandler(viewer));
viewer.setViewport(new Viewport(true));
viewer.setZoomManager(zoomManager);
```
上述示例中,我们首先创建了一个ScrollingGraphicalViewer实例,并获取其ZoomManager。然后我们设置了可用的缩放级别以及缩放模式(FIT_ALL,FIT_HEIGHT,FIT_WIDTH)。接着通过MouseWheelZoomHandler实现鼠标滚轮缩放功能,并将其添加到viewer中。最后设置viewer的EditDomain、KeyHandler、Viewport和ZoomManager。
要在拖动Viewpart时通知ScrollingGraphicalViewer的内容重新布局使其一直居中,你需要实现ViewPart中的dragOver方法。以下是一个简单的示例代码:
```java
@Override
public boolean dragOver(DropTargetEvent event) {
if (viewer != null) {
Point point = Display.getDefault().map(null, viewer.getControl(), event.x, event.y);
viewer.scrollTo(point.x, point.y);
return true;
}
return false;
}
```
上述示例中,我们首先将屏幕坐标转换为viewer坐标。然后调用viewer的scrollTo方法来保持viewer内容在屏幕中心。最后返回true以指示拖放操作已成功处理。