Подождите, пока ActionListener завершит выполнение для сбора данных - PullRequest
0 голосов
/ 23 марта 2020

У меня есть ActionListener с кодом, где я хочу, чтобы строка собирала определенные данные после завершения выполнения ActionListener. Ниже приведен код важного класса, который выполняет код:

import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JTextField;

public class Main extends JFrame implements KeyListener {
JTextField UpperCaseEverything;
static int a = 1;
static String CurrentlySelectedText;
static String[] StringCurrentlySelectedText;

public Main () {
    super("Original Text");

    UpperCaseEverything = new JTextField("Click caps lock to capitalize the text (you can change the text, and as aforementioned, if Caps Lock is off, it will get your previous text before it was capitalized).");
    CurrentlySelectedText = UpperCaseEverything.getText();

    UpperCaseEverything.addKeyListener(
            new KeyListener () {
                public void keyTyped(KeyEvent e) {

                }

                public void keyPressed(KeyEvent e) {

                    if (e.getKeyCode() == KeyEvent.VK_CAPS_LOCK && a%2 == 1) {
                        String SelectedText = UpperCaseEverything.getText();
                        String UpperCaseText = SelectedText.toUpperCase();

                        UpperCaseEverything.setText(UpperCaseText);
                        a++;
                    }

                    else if (e.getKeyCode() != KeyEvent.VK_CAPS_LOCK) {
                        CurrentlySelectedText = UpperCaseEverything.getText();
                    }

                    else if (a%2 == 0) {
                        UpperCaseEverything.setText(CurrentlySelectedText);
                        a++;
                    }
                }

                public void keyReleased(KeyEvent e) {

                }
            }
            );

    add(UpperCaseEverything, BorderLayout.NORTH);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(250, 250);
    setVisible(true);
}

public void keyTyped(KeyEvent e) {

}

public void keyPressed(KeyEvent e) {

}

public void keyReleased(KeyEvent e) {

}

}

Наиболее важная информация из кода, с которой у меня возникают проблемы, включает:

UpperCaseEverything.addKeyListener(
            new KeyListener () {
                public void keyTyped(KeyEvent e) {

                }

                public void keyPressed(KeyEvent e) {

                    if (e.getKeyCode() == KeyEvent.VK_CAPS_LOCK && a%2 == 1) {
                        String SelectedText = UpperCaseEverything.getText();
                        String UpperCaseText = SelectedText.toUpperCase();

                        UpperCaseEverything.setText(UpperCaseText);
                        a++;
                    }

                    else if (e.getKeyCode() != KeyEvent.VK_CAPS_LOCK) {
                        CurrentlySelectedText = UpperCaseEverything.getText();
                    }

                    else if (a%2 == 0) {
                        UpperCaseEverything.setText(CurrentlySelectedText);
                        a++;
                    }
                }

                public void keyReleased(KeyEvent e) {

                }
            }
            );

In:

else if (e.getKeyCode() != KeyEvent.VK_CAPS_LOCK) {
                        CurrentlySelectedText = UpperCaseEverything.getText();
                    }

Я хочу, чтобы строка NowSelectedText собирала весь текст из JButton UpperCaseEverything после того, как пользователь завершил ввод. Это потому, что строковая переменная CurrentSelectedText может собирать данные, которые мне не нужны.

Например: если пользователь набрал: «Привет» и удаляет полный останов в конце, Предложение до удаления полной остановки сохраняется в переменной CurrentSelectedText. Если пользователь затем нажимает «caps lock» один раз, тогда весь текст (с удаленной полной остановкой) становится заглавным, как и должно быть. Однако, если пользователь снова нажимает кнопку блокировки заглавных букв, значит «Привет». текст по-прежнему сохраняется внутри переменной CurrentSelectedText, и не «Hi», который должен быть сохранен, не сохраняется в переменной CurrentSelectedText. Следовательно, JButton UpperCaseEverything печатает «Привет». вместо "Привет". Чтобы решить эту проблему, строковая переменная CurrentSelectedText должна сохранить текст после нажатия кнопки удаления, но я не знаю, как это сделать.

...