我有這段代碼可以創建一些文本欄位,我希望我的插入符號在按 ENTER 后將其位置更改為另一個 JTextField。是否有可能做到這一點?在圖片中,我舉了一個插入符號轉移應該如何作業的例子。
class CaretMove extends JFrame implements KeyListener {
JTextField jTextField[] = new JTextField[3];
CaretMove(){
setSize(300, 150);
setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
setLocationRelativeTo(null);
Border border = BorderFactory.createLineBorder(null, 6);
for (int i=0;i<3;i ) {
jTextField[i] = new JTextField(10);
jTextField[i].addKeyListener(this);
jTextField[i].setBorder(border);
add(jTextField[i]);
}
pack();
setVisible(true);
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyChar() == KeyEvent.VK_ENTER){
JTextField jTextFiel = (JTextField)e.getSource();
if ( jTextFiel == jTextField[2])
e.setSource(jTextField[1]);
else {
e.setSource(jTextField[Arrays.asList(jTextField).indexOf(jTextFiel) 1]);
((JTextField) e.getSource()).setText("meow"); //test meow
((JTextField) e.getSource()).setCaret(new MyCaret());
}
}
}
@Override
public void keyReleased(KeyEvent e) {
}
解決方案: 我添加了這些行:
e.setSource(jTextField[Arrays.asList(jTextField).indexOf(jTextFiel) 1]);
((JTextField) e.getSource()).requestFocusInWindow();
第一行將我當前的文本欄位物件設定為下一個,然后我選擇它作為主要焦點。

uj5u.com熱心網友回復:
首先,永遠不要將 KeyListener 添加到 Swing 文本組件,因為這會對文本組件的固有功能產生不良影響。
相反,如果您想捕獲回車鍵,只需將 ActionListener 添加到 JTextField,因為這將由回車鍵觸發。然后,您可以在此偵聽器中呼叫.requestFocusInWindow()另一個 JTextField,這會將鍵盤焦點轉移到新的 JTextField。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/462468.html
上一篇:如何從另一個類添加到JPanel
下一篇:GridLayout的未定義行為
