gpt4 book ai didi

java - 如何创建不可编辑的 GXT ComboBox?

转载 作者:搜寻专家 更新时间:2023-11-01 01:15:00 25 4
gpt4 key购买 nike

我正在使用 GWT/GXT 并尝试创建一个“普通”组合框 - 您无法输入的组合框,但您可以输入单个字符,它会自动转到列表中以该字符开头的第一项信。所以,我不想要它 READONLY,我想要它,这样你就不能用你自己的文本替换其中的文本(不能在其中键入字符)。

我不知道如何让 ComboBox 或 SimpleComboBox 执行此操作。我试过所有设置组合都无济于事。我确实看到有一个 GXT ListBox,但我需要一个从 Field 扩展的组件。

真的没有办法做到这一点还是我遗漏了什么?

最佳答案

通过使用 setEditable(false)setForceSelection(true) 并扩展该类,您可以自己完成此操作(通过观察小部件上的按键操作)。

一、子类:

package net.binarymuse.gwt.gxt.client;

import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.KeyListener;
import com.extjs.gxt.ui.client.widget.form.SimpleComboBox;

public class MySimpleComboBox<T extends String> extends SimpleComboBox<T> {

public MySimpleComboBox() {
super();
this.addKeyListener(new KeyListener(){
@Override
public void componentKeyDown(ComponentEvent event)
{
// Get a reference to the combobox in question
MySimpleComboBox<T> combo = MySimpleComboBox.this;

// Get the character that has been pressed
String sChar = String.valueOf((char) event.getKeyCode());
// TODO - add some checking here to make sure the character is
// one we actually want to process

// Make sure we have items in the store to iterate
int numItems = combo.getStore().getCount();
if(numItems == 0)
return;

// Check each item in the store to see if it starts with our character
for(int i = 0; i < numItems; i++)
{
String value = combo.getStore().getAt(i).getValue();
// If it does, select it and return
if(value.startsWith(sChar) || value.startsWith(sChar.toUpperCase()))
{
MySimpleComboBox.this.setSimpleValue((T) value);
return;
}
}
}
});
}

}

和测试:

package net.binarymuse.gwt.gxt.client;

import com.extjs.gxt.ui.client.widget.form.SimpleComboBox;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;


public class GxtSandbox implements EntryPoint {

public void onModuleLoad() {
SimpleComboBox<String> box = new MySimpleComboBox<String>();
box.add("One");
box.add("Two");
box.add("Three");
box.setEditable(false);
box.setForceSelection(true);

RootPanel.get().add(box);
}
}

给予组合框焦点并按“T”应该在列表中选择“Two”。

照原样,类总是选择列表中以该字符开头的第一项;但是,修改它以使其选择列表中的下一项并不难(就像“真实”组合框的典型情况一样)。

关于java - 如何创建不可编辑的 GXT ComboBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2518143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com