Сортировать текст в JTextArea - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь отсортировать пользовательский ввод при вводе в JTextArea.Например, когда пользователь вводит «Joe Frazier», я бы хотел сохранить просто «Joe» в строке, определенной как имя, и «Frazier» в определенной в строке фамилии.Здесь, в моем коде, я попробовал метод split для разделения строк после каждого пробела.присвоение имени первой строке до пробела и фамилии второй строке после пробела.Я получаю исключения.Что не так с логикой моего кода.Я не уверен, что мне ясно.

Вот исключения:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1
    at java_101.InfoAdd$StudentData.keyTyped(InfoAdd.java:52)
    at java.awt.Component.processKeyEvent(Component.java:6490)
    at javax.swing.JComponent.processKeyEvent(JComponent.java:2832)
    at java.awt.Component.processEvent(Component.java:6312)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4891)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
    at java.awt.Component.dispatchEventImpl(Component.java:4762)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1
    at java_101.InfoAdd$StudentData.keyTyped(InfoAdd.java:52)
    at java.awt.Component.processKeyEvent(Component.java:6490)
    at javax.swing.JComponent.processKeyEvent(JComponent.java:2832)
    at java.awt.Component.processEvent(Component.java:6312)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4891)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
    at java.awt.Component.dispatchEventImpl(Component.java:4762)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

А вот код:

import javax.swing.*;
import static java.lang.System.out;
import java.awt.event.*;
import java.util.ArrayList;
    public class InfoAdd {
        JFrame frame;
        JTextArea text;
        JTextArea texts;
        String te = "Pale";
        ArrayList<StudentData> array;
        int y; 
        public static void main(String[] args) {
        InfoAdd game = new InfoAdd();
        game.go();
        }
        public void go(){
            frame = new JFrame("InfoAdd");
            frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
            JPanel panel = new JPanel(); 
            JButton button = new JButton("Click");
            text = new JTextArea(10,20);
            texts = new JTextArea(10,20);
            JScrollPane paneu = new JScrollPane(texts);
            JScrollPane pane = new JScrollPane(text);
            text.addKeyListener(new StudentData());
            texts.setLineWrap(true);
            text.setLineWrap(true);
            texts.setText(te);

            paneu.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
            paneu.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
            pane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
            pane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

            panel.add(pane);
            panel.add(button);
            panel.add(paneu);

            frame.setSize(400, 400);
            frame.getContentPane().add(panel);
            frame.setVisible(true); 
        }
    public class StudentData implements KeyListener {

      private String firstname; 
      private String lastname; 
      private String clas;

      public void keyTyped(KeyEvent e) {
        String jext = text.getText();
        String [] split = jext.split("\\s+");
        firstname = split[0];
        lastname = split[1];

        texts.setText("FirstName: " + firstname + "\nLastName: " + jext);
      }

      public void keyPressed(KeyEvent ex) {
        // TODO Auto-generated method stub

      }

      @Override
      public void keyReleased(KeyEvent eu) {
        // TODO Auto-generated method stub

      }
    }

1 Ответ

0 голосов
/ 26 февраля 2019

Ваш код в методе keyTyped, который вызывается каждый раз, когда пользователь вводит символ.Это означает, что если пользователь печатает Joe Frazier, он сначала будет вызван с текстом J.Там нет пробелов, поэтому split будет содержать только одну строку, split[0].Затем вы оцениваете split[1], который выдает ошибку, потому что она не существует.

Вы должны проверить длину массива следующим образом:

String[] split = jext.split("\\s+");
if (split.length == 2) { // How you want it to work with 3 or more elements?
    firstname = split[0];
    lastname = split[1];

    texts.setText("FirstName: " + firstname + "\nLastName: " + jext);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...