Я хочу, чтобы мой графический интерфейс пользователя принял целое число - PullRequest
1 голос
/ 26 апреля 2011

Здравствуйте, у меня проблемы с работой.Я хочу, чтобы графический пользовательский интерфейс принимал одну инструкцию в форме "номер вставки" .

Примером такой команды является " insert Whiz 105 "

Я запрограммировал Java для использования слова "вставка" в пользовательском вводе, а также в строке.Однако я не знаю, как заставить Java обнаруживать как строку, так и целое число в одном операторе.

Как создать оператор, который позволяет мне разделять строки и целые числа, когда пользователь вводит их оба в GUI ?.Например, вместо того, чтобы создавать два входа для String и Integer, я использую один вход вместо того, чтобы ссылаться на них обоих.

Вот мой код, пожалуйста, основывайте свои ответы на нем.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

/**
   This class is used to demonstrate
   the operations in the LinkedList1 class.
*/

public class LinkedList1Demo extends JFrame
{    
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private LinkedList<String> names;


    private JTextArea  listView;
    private JTextField cmdTextField;
    private JTextField resultTextField;

    public LinkedList1Demo()
    {
       names = new LinkedList<String>(); 
       listView = new JTextArea();
       cmdTextField = new JTextField();
       resultTextField = new JTextField();       

       // Create a panel and label for result field
       JPanel resultPanel = new JPanel(new GridLayout(1,2));
       resultPanel.add(new JLabel("Command Result"));
       resultPanel.add(resultTextField);
       resultTextField.setEditable(false);
       add(resultPanel, BorderLayout.PAGE_START);

       // Put the textArea in the center of the frame
       add(listView);
       listView.setEditable(false);
       listView.setBackground(Color.WHITE);
       listView.setPreferredSize(new Dimension(200, 25));



       // Create a panel and label for the command text field
       JPanel cmdPanel = new JPanel(new GridLayout(1,2));
       cmdPanel.add(new JLabel("Command Name:"));
       cmdPanel.add(cmdTextField);
       add(cmdPanel, BorderLayout.PAGE_END);  
       cmdTextField.addActionListener(new CmdTextListener());
       cmdPanel.setPreferredSize(new Dimension(200, 25));

       // Set up the frame
       setTitle("Linked List Demo");
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       pack();
       setVisible(true);       
    }

    /**
       Private class that responds to the command that 
       the user types into the command entry text field.
    */

    private class CmdTextListener
            implements ActionListener
    {            
        public void actionPerformed(ActionEvent evt)
        {
            String cmdText = cmdTextField.getText();

            Scanner sc = new Scanner(cmdText);

            String cmd = sc.next();

            if (cmd.equals("insert"))
            {
                if (sc.hasNextInt())
                {
                    // add index element
                    int index = sc.nextInt();
                    String element = sc.next();
                    names.add(index, element);                
                }
                else
                {  
                    // add element
                    String element = sc.next();
                    names.add(element);                
                }
                listView.setText(names.toString());
                pack();
                return;
            }
            if (cmd.equals("remove"))
            {
                if (sc.hasNextInt())
                {
                    // remove index
                    int index = sc.nextInt();
                    Object obj = names.remove(index);
                    String res = obj.toString();
                    resultTextField.setText(res);              
                }
                else
                {
                    // remove element
                    String element = sc.next();
                    boolean res = names.remove(element);
                          String resText = String.valueOf(res);
                    resultTextField.setText(resText);
                }
                listView.setText(names.toString());
                pack();
                return;
            }
            if (cmd.equals("isempty"))
            {
                    String resText = String.valueOf(names.isEmpty());
                resultTextField.setText(resText);
                return;
            }
            if (cmd.equals("size"))
            {
                   String resText = String.valueOf(names.size());
               resultTextField.setText(resText);
               return;
            }

        }
    }

    /**
       The main method creates an instance of the 
       LinkedList1Demo class which causes it to 
       display its window.
    */

    public static void main(String [ ] args)
    {
        new LinkedList1Demo();

    }

}

Ответы [ 3 ]

2 голосов
/ 26 апреля 2011

Используйте метод String split для разбиения строки.

String input = /* pull from the text box */.
String[] tokens = input.split("\\s");
if (tokens.length == 3)
{
     String command = tokens[0];
     String intValue= tokens[2];
}
2 голосов
/ 26 апреля 2011

Вы можете попробовать что-то вроде:

String cmd = sc.next();

try {

    int number = Integer.parseInt(cmd);

} catch (NumberFormatException e) {
     if (cmd.equals("insert"))
            {
                if (sc.hasNextInt())
                {
                    // add index element
                    int index = sc.nextInt();
                    String element = sc.next();
                    names.add(index, element);                
                }
                else
                {  
                    // add element
                    String element = sc.next();
                    names.add(element);                
                }
                listView.setText(names.toString());
                pack();
                return;
            }
            if (cmd.equals("remove"))
            {
                if (sc.hasNextInt())
                {
                    // remove index
                    int index = sc.nextInt();
                    Object obj = names.remove(index);
                    String res = obj.toString();
                    resultTextField.setText(res);              
                }
                else
                {
                    // remove element
                    String element = sc.next();
                    boolean res = names.remove(element);
                          String resText = String.valueOf(res);
                    resultTextField.setText(resText);
                }
                listView.setText(names.toString());
                pack();
                return;
            }
            if (cmd.equals("isempty"))
            {
                    String resText = String.valueOf(names.isEmpty());
                resultTextField.setText(resText);
                return;
            }
            if (cmd.equals("size"))
            {
                   String resText = String.valueOf(names.size());
               resultTextField.setText(resText);
               return;
            }
}

Это попытается проанализировать входные данные в целое число. Если это число, то оно будет успешным, в противном случае оно завершится неудачно и войдет в ваш блок catch и будет обработано как строка.

2 голосов
/ 26 апреля 2011

Я бы попросил вас объяснить ваши требования лучше. Но быстрая идея, если вы уверены, что получите только кучу строк и одно целое число, состоит в том, чтобы отделить строку с помощью токенизатора или, предпочтительно, метода split.

Затем вы перебираете каждое отдельное слово и пробуете метод Integer.parseInt (). Если возникает NumberFormatException, это строка, и вы должны добавить ее к вашему строковому объекту. В противном случае это целое число, и вы можете угрожать ему следующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...