我有一个组合框,其中包含以特殊字符开头的项目(即À)。
目前,在使用组合框时,如果按一个键(即“a”),它会选择以相同的第一个字母开头的项目 - 但它不会选择以特殊字符开头的项目..
有没有办法修改JComboBox.java中的方法selectWithKeyChar()来忽略特殊字符并将其视为常规字符?
我想到的解决方案但不知道如何实施:
1)传入一个临时的组合框模型,选择不包含重音的WithKeyChar()。如果可以的话,如何将模型传递给selectWithKeyChar()?
2)覆盖selectWithKeyChar()方法?
3)制作自定义方法。在这种情况下,您将如何使其运行而不是JComboBox.java中已存在的那个?
以下是我的设置的最小示例:
在主要内容中调用JPanel:
SwingUtilities.invokeLater(new Runnable(){ @Override public void run(){ JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.getContentPane().add(new B()); frame.pack(); frame.setVisible(true); } });
答案 0 :(得分:0)
1)传入一个临时的组合框模型,选择WithWeyKeyChar()即可 不包括口音。如果这是可能的,你如何传入 模型选择WithKeyChar()?
2)覆盖selectWithKeyChar()方法?
3)制作自定义方法。在这种情况下,你将如何让它运行 而不是JComboBox.java中已经存在的那个?
所有这些都是可能的,您可以创建temp
ComoBoxModel 和extends
JComboBox来覆盖selectWithKeyCharacter
上的CustomComboBox
。以下是代码示例:
<强> CustomComboBox.java 强>
public class CustomComboBox extends JComboBox<String>{
private static final long serialVersionUID = 1L;
public CustomComboBox(String[] items) {
super(items);
}
@Override
public boolean selectWithKeyChar(char keyChar) {
int index;
ComboBoxModel<String> tempModel = getModel(); // Put the model on temp variable for saving it for later use.
String[] itemsArr = new String[getModel().getSize()];
for(int i = 0; i < getModel().getSize(); i++) {
// This will normalizes the Strings
String normalize = Normalizer.normalize(getModel().getElementAt(i), Normalizer.Form.NFD);
normalize = normalize.replaceAll("\\p{M}", "");
itemsArr[i] = normalize;
}
if ( keySelectionManager == null )
keySelectionManager = createDefaultKeySelectionManager();
setModel(new DefaultComboBoxModel<String>(itemsArr)); // Set the Temporary items to be checked.
index = keySelectionManager.selectionForKey(keyChar,getModel());
setModel(tempModel); // Set back the original items.
System.out.println(index);
if ( index != -1 ) {
setSelectedIndex(index);
return true;
}
else
return false;
}
}
如果你要测试它,即使你输入一个普通的字符'a',它也会选择带有重音或非重音的JComboBox中的元素。
<强> TestMain.java 强>
public class TestMain {
public static void main(String[] args) {
String[] lists = {"ápa","Zabra","Prime"};
CustomComboBox combo = new CustomComboBox(lists);
System.out.println(combo.selectWithKeyChar('A'));
JFrame frame = new JFrame("Sample");
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.setVisible(true);
combo.setSize(70, 30);
combo.setLocation(100, 100);
frame.add(combo);
}
}