1

我在 Java 中有更多的文本字段。当我按CTRL+时A,我希望所有的文本字段都被选中。我尝试过这种方式,但只有具有焦点的文本字段被选中。

你能帮我吗?

class Main{

public JTextField[] textFields;

private TextFieldSelected(int byteCount) {

    textFields = new JTextField[byteCount];
    for (int i = 0; i < textFields.length; i++) {
        textFields[i] = new JTextField(3);

    }

private class CtrlAAdapter extends KeyAdapter {

    public void keyPressed(KeyEvent e) {
        //JTextField textField = (JTextField) e.getComponent();

        if(KeyEvent.VK_CONTROL == e.getKeyCode() && e.getModifiers() == 0)
            if(KeyEvent.VK_A == e.getKeyCode() && e.getModifiers() ==0)

                new SelectAllListener();}}


            //  for(int i=0; i < textFields.length; i++) textFields[i].selectAll();

         class SelectAllListener implements ActionListener {  

             public void actionPerformed(ActionEvent ev) {  
                 for(int i=0; i < textFields.length; i++){
                     //JTextField field = textFields[i];
                    // String text=textFields[i].getText();
                    // textArea.append(text);
                     textFields[i].selectAll();  
                 }



         }
//      reset();
        //  e.consume();
         }

}

我改了,还是不行:

for (int i = 0; i < textFields.length; i++) {
         JTextField textField = textFields[i];
        textField.getDocument().addDocumentListener(documentListener);
        KeyBindings keybindings = new KeyBindings(textField);


    } 

类键绑定{

    public KeyBindings(JTextField textField){
        Action action = new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {

                for(int i=0;i < textFields.length; i++){
                    JTextField textField = textFields[i];


                    for(int j=0;j < textFields.length; j++){

                            textFields[j].selectAll();
                            textFields[j].transferFocus();
                            }
                }
            }
        };

        String keyStrokeAndKey = "control A";
        KeyStroke keyStroke = KeyStroke.getKeyStroke(keyStrokeAndKey);
        textField.getInputMap().put(keyStroke, keyStrokeAndKey);
        textField.getActionMap().put(keyStrokeAndKey, action);

    }
}

以及如何使未聚焦的字段也显示选择?

4

1 回答 1

1

KeyListener有一个奇妙的限制。它注册的组件在接收关键事件之前必须具有焦点并且是可聚焦的

为了接收这个,你应该使用key bindings API

基本上,KeyStroke在包含文本字段的容器中注册 a,一定要使用WHEN_IN_FOCUSED_WINDOW. 遍历组件列表,查找JTextField并调用selectAll字段

您可能遇到的另一个问题是未聚焦的字段可能不会显示选择

于 2013-03-15T12:37:13.357 回答