JTextfield - String split и intparse - PullRequest
0 голосов
/ 07 мая 2018

Я работаю над графическим проектом черепахи и пытаюсь получить пользовательский ввод из jtextfield (commField), который должен выглядеть так: Программа запускается, даже если введена правильная команда, она перейдет в диалог сообщения об ошибке. После нескольких часов работы с мозгами я пытаюсь понять, почему и поэтому прошу любую помощь. Если для правильного ответа требуется больше моего кода, возможно, я сосредотачиваюсь не на том.

commField.addActionListener(new ActionListener() {


        public void actionPerformed(ActionEvent e) {


            else if(commField.getText().contains("forward")) {
                String cForward = commField.toString();
                String[] cForwardArray = cForward.split("\\s+");
                try {
                    int distance = Integer.parseInt(cForwardArray[1]);
                    graphicsPanel.forward(distance);

                } 
                catch (Exception ev) {
                    JOptionPane.showMessageDialog(textArea, 
                            "Invaild or missing parameter, check the help section\n"
                            + "for more information on Commands");
                }
            }
            else if(commField.getText().contains("backward")) {
                String cBackward = commField.toString();
                String[] cBackwardArray = cBackward.split("\\s+");
                try {
                    int distance = Integer.parseInt(cBackwardArray[1]);
                    graphicsPanel.backward(distance);
                    graphicsPanel.repaint();
                } 
                catch (Exception ev) {
                    JOptionPane.showMessageDialog(textArea, 
                            "Invaild or missing parameter, check the help section\n"
                            + "for more information on Commands");
                }
            }



        }
    });

Ниже приведен полный блок кода для тех, кто хочет:

commField.addActionListener(new ActionListener() {


        public void actionPerformed(ActionEvent e) {

            if(commField.getText().contains("penup")) {
                graphicsPanel.penUp();
            }
            else if(commField.getText().contains("pendown")) {
                graphicsPanel.penDown();
            }
            else if(commField.getText().contains("turnright")) {
                graphicsPanel.turnRight();
            }
            else if(commField.getText().contains("turnleft")) {
                graphicsPanel.turnLeft();
            }
            else if(commField.getText().contains("forward")) {
                String cForward = commField.toString();
                String[] cForwardArray = cForward.split("\\s+");
                try {
                    int distance = Integer.parseInt(cForwardArray[1]);
                    graphicsPanel.forward(distance);

                    System.out.println(commField);

                } 
                catch (Exception ev) {
                    JOptionPane.showMessageDialog(textArea, 
                            "Invaild or missing parameter, check the help section\n"
                            + "for more information on Commands");
                }
            }
            else if(commField.getText().contains("backward")) {
                String cBackward = commField.toString();
                String[] cBackwardArray = cBackward.split("\\s+");
                try {
                    int distance = Integer.parseInt(cBackwardArray[1]);
                    graphicsPanel.backward(distance);
                    graphicsPanel.repaint();
                } 
                catch (Exception ev) {
                    JOptionPane.showMessageDialog(textArea, 
                            "Invaild or missing parameter, check the help section\n"
                            + "for more information on Commands");
                }
            }

            else if(commField.getText().contains("black")) {
                graphicsPanel.black(Color.black);
            }
            else if(commField.getText().contains("green")) {
                graphicsPanel.green(Color.green);
            }
            else if(commField.getText().contains("red")) {
                graphicsPanel.red(Color.red);
            }
            else if(commField.getText().contains("reset")) {
                graphicsPanel.clear();
            }
            else {
                JOptionPane.showMessageDialog(textArea, "Invalid command, try again");
            }

            commField.setText("");
            graphicsPanel.repaint();


        }
    });

1 Ответ

0 голосов
/ 07 мая 2018

Интересующая линия:

String cForward = commField.toString();

JTextField.toString() не возвращает содержимое JTextField.

Я проверил свои источники Java 8 и обнаружил следующее:

public String toString() {
    return getClass().getName() + '[' + paramString() + ']';
}

Однако метод toString() предназначен для отладочной утилиты . Если его поведение явно не задокументировано, не рекомендуется полагаться на него программно.

Для извлечения его текстового содержимого JTextField предоставляет отдельный метод: JTextComponent#getText(). Поэтому строку следует изменить на:

String cForward = commField.getText();
...