2017-01-07 2 views
-1

Je crée un programme de dessin qui lit les commandes à partir d'un fichier texte, lorsque le fichier est sélectionné, le programme doit valider les commandes pour les paramètres d'entrée corrects. le fichier texte ouvert dans le programme comprend;Swing/AWT filechooser validation graphique dessin

Move 100 100 // (move pen to X Y) 
MIVE 100 50 // (Invalid comamnd spelt incorrectly) 
move x y // (invalid command not an integer) 
Line 20 100 // (draw a line at X Y) 

Le problème que j'ai est que lors de l'ouverture du fichier texte dans le programme, il importe le fichier texte mais il ne valide pas dans le JTextArea et tracer la ligne à choisi co-X/Y ordonnées. Quelqu'un pourrait-il me diriger dans la bonne direction?

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 

public class Instructionpanel extends JPanel { 

JTextArea instructions; 

// Move line text clear 
public Instructionpanel(GraphicsPanel graphicspanel) { 

    instructions = new JTextArea(
      "This is where the instructions will displayed", 10, 50); // Rows 
                     // * 
                     // columns 
    instructions.setLineWrap(true); 
    instructions.setWrapStyleWord(true); 
    instructions.setEditable(true); 
    JScrollPane areaScrollPane = new JScrollPane(instructions); 
    areaScrollPane 
      .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
    add(areaScrollPane); 
    // add(instructions); 
} 

public void processFile(File file) { 
    Scanner scan = null; 
    try { 
     scan = new Scanner(file); 

    } catch (FileNotFoundException el) { 
     el.printStackTrace(); 
    } 

    String allInstructions = ""; 

    String allInstructions1 = ""; 
    String instruction = ""; 
    while (scan.hasNext()) { 
     instruction = scan.nextLine() + "\n"; 
     // check or validate the instruction 

     allInstructions1 += validateInstruction(instruction); 

    } 

    instructions.setText(allInstructions1); 

} 

public String validateInstruction(String orig) { 
    String returnString = orig; 

    // Do all the checking 
    // Convert string to an array 
    String command = ""; 
    String[] instructionArray = orig.split(" "); 

    int x, y = 0; 

    switch(instructionArray[0]) 
     { 
    case "MOVE": 
     // Check there three parameters 
     doMove(instructionArray);   { 
      // And they are integers 
      instructions = new JTextArea(" Incorrect parameter type i.e 100"); 
      instructions = new JTextArea(":incorrect number of parameters i.e Line 100 200"); 
      try { 

       GraphicsPanel.setPos (Integer.parseInt(instructionArray[1]),Integer.parseInt(instructionArray[2])); 

      } 

      catch (NumberFormatException e) 
      { 
       instructions = new JTextArea(" only numbers are allowed "); 
      } 
     } 
     break; 

      case "LINE": 
       doLine (instructionArray); 
     // Check there three parameters 
     if (instructionArray.length != 3) { 
      // And they are integers 
      instructions = new JTextArea(" Incorrect parameter type i.e 100"); 
      instructions = new JTextArea(":incorrect number of parameters i.e Line 100 200"); 
      try { 
       GraphicsPanel.drawLine (Integer.parseInt(instructionArray[1]),Integer.parseInt(instructionArray[2])); 
      } catch (NumberFormatException e) { 
       instructions = new JTextArea(" only numbers are allowed "); 
      }break; 

      }} 
    return orig;} 

private void doLine(String[] instructionArray) { 
    // TODO Auto-generated method stub 

} 
private void doMove(String[] instructionArray) { 
    // TODO Auto-generated method stub 
} 
} 
+0

Pour une meilleure aide plus tôt, poster un [mcve]. Pour en faire un MCVE, il doit être complet (en un seul copier/coller), il devra donc avoir les données codées en dur dans le code source sous la forme 'String' et inclure une méthode principale pour le mettre à l'écran. BTW - Je note que sauf pour la première question que vous avez posée, vous n'avez reçu aucune réponse. De plus, vous avez été avisé au moins une fois auparavant d'afficher un SSCCE (qui est l'équivalent d'un MCVE) et n'avez pas encore réussi à saisir l'avantage de le faire. Vous pourriez vouloir réfléchir sur ces points, si vous souhaitez obtenir des solutions réussies sur SO. –

+0

Ouais, donc j'ai reconnu cependant, je ne suis pas l'utilisateur le plus familier quand il s'agit de Java, à partir de zéro n'est pas une option que ma mission est due dans une journée. – Adam

+1

* ".. ma mission est due dans un jour" * Ensuite, vous devriez avoir commencé plus tôt et/ou utilisé une meilleure gestion du temps. Et à l'avenir, ne confondez pas vos problèmes avec les nôtres. Les personnes qui aident gratuitement, préfèrent généralement aider les autres avec de bonnes compétences en gestion du temps, au moins le temps de suivre leurs conseils. –

Répondre

0

D'un rapide coup d'œil, je peux dire que votre String[] instructionArray probablement créé avec un seul élément depuis le orig.split(" ") a double espace comme séparateur, donc instructionArray[0] contient toute la ligne depuis vos jetons sont espacés avec un seul espace. Par conséquent, aucun de vos cas dans validateInstruction(String orig) ne correspond.

Pour l'instant, vous pouvez probablement vous en sortir en remplaçant l'espace double par un espace unique dans l'appel orig.split(" "). Cela étant dit, je ne peux pas garantir que cela résoudra tous les problèmes potentiels qui pourraient survenir après le changement.