我注意到我可以使用getName()作为技巧的一部分。 What is java.awt.Component.getName() and setName() used for? 但我真的不知道从哪里开始。我应该使用什么类型的监听器(假设文本字段/或框当前正在闪烁/选中)
这是我之前的问题,谢谢你的帮助。 How do I use requestFocus in a Java JFrame GUI?
我意识到对于我正在创建的每个组件(Textfield),我必须插入一个像requestFocus(或使用transferFocus)的语句。 是否可以将此政策应用于所有字段???
我有几个文本字段和ComboBox。我遇到的问题是我不想为每个字段/框编写方法。
例如,我写了一个这样的方法
private JTextField getFirstNameEntry() {
.... do something
}
因为我的导师会像这样编写他的程序
private JPanel getJContentPane() {
jContentPane = new JPanel();
jContentPane.setLayout(new java.awt.FlowLayout(FlowLayout.LEADING));
jContentPane.add(makeLabel(" First Name *", 100, 20));
jContentPane.add(getFirstNameEntry(), null);
jContentPane.add(makeLabel(" Middle Initial", 100, 20));
jContentPane.add(getMiddleInitialEntry(), null);
// etc
return jContentPane;
但是,为了节省冗余(这是我最初的动机),比如说我有一个盒子,我只需在上面的方法中添加以下代码:getJContentPane()
titleBox = new JComboBox(new String[]{"Mr.","Mrs.","Ms.","Dr.","Prof.","Rev."});
jContentPane.add(titleBox);
但是这样做,我仍然需要创建一个方法来做addItemListener
private void setComboBoxFocus() {
titleBox.addItemListener(
new ItemListener(){
public void itemStateChanged(ItemEvent e){
if(e.getStateChange() == ItemEvent.SELECTED)
{
String titleSelected = titleBox.getSelectedItem().toString();
System.out.println(titleSelected);
titleBox.transferFocus();
}
}
});
}
然而,这根本不能真正节省冗余。如果我要添加多个ComboBox,我将不得不编写另一个类似的方法。事实上,即使在一个ComboBox(titleBox)的情况下,我仍然会为titleBox编写一个方法。
所以我的问题是:有没有办法编写一个可以将焦点调用到所有的通用方法(可能是一个用于ComboBox类型)?
谢谢你,很抱歉这篇长篇文章。
答案 0 :(得分:2)
为什么不在JComboBox
方法中使用setComboBoxFocus()
参数,该方法允许您将该侦听器设置为您可能拥有的任何 JComboBox
?像这样:
private void setComboBoxFocus(JComboBox box) {
box.addItemListener(
new ItemListener(){
public void itemStateChanged(ItemEvent e){
if(e.getStateChange() == ItemEvent.SELECTED)
{
String titleSelected = box.getSelectedItem().toString();
System.out.println(titleSelected);
box.transferFocus();
}
}
});
}