2017-01-07 2 views
-1

Ich mache ein Zeichenprogramm, das Befehle aus einer Textdatei liest, wenn die Datei ausgewählt wird, sollte das Programm die Befehle für korrekte Eingabe Parameter validieren. Die im Programm geöffnete Textdatei enthält:Swing/AWT filechooser Validierung Grafik Zeichnung

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) 

Das Problem, das ich habe ist, dass die Textdatei in das Programm beim Öffnen, wird die Textdatei zu importieren, aber es wird nicht in die JTextArea Validieren und die Zeile an ausgewählten X/Y co- Zeichnung Ordinaten. Kann mir jemand in die richtige Richtung zeigen?

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

Für bessere Hilfe früher, post ein [MCVE]. Um es zu einem MCVE zu machen, muss es Complete sein (in einer einzigen Kopie/Paste), so dass die Daten im Quellcode als "String" fest codiert sein müssen und eine Hauptmethode enthalten müssen, um es auf den Bildschirm zu bringen. BTW - Ich bemerke, dass Sie bis auf die erste Frage, die Sie gestellt haben, keine Antworten erhalten haben. Darüber hinaus wurde Ihnen bei mindestens einer früheren Gelegenheit geraten, eine SSCCE (die dem MCVE entspricht) zu veröffentlichen, und es ist bisher nicht gelungen, den Vorteil davon zu erkennen. Vielleicht möchten Sie über diese Punkte nachdenken, wenn Sie erfolgreiche Lösungen für SO wünschen. –

+0

Ja, also habe ich bestätigt, aber ich bin nicht der am meisten vertraute Benutzer, wenn es um Java geht, von vorne anfangen ist keine Option, die meine Aufgabe an einem Tag fällig ist. – Adam

+1

* ".. meine Aufgabe ist an einem Tag fällig" * Dann sollten Sie früher angefangen haben und/oder ein besseres Zeitmanagement verwendet haben. Und verwechseln Sie in Zukunft Ihre Probleme nicht mit unseren. Menschen, die kostenlos helfen, ziehen es im Allgemeinen vor, anderen mit guten Zeitmanagementfähigkeiten zu helfen, zumindest genug Zeit, um ihren Ratschlägen zu folgen. –

Antwort

0

Von einem kurzen Blick kann ich sagen, dass Ihr String[] instructionArray wahrscheinlich mit nur einem Element, da die orig.split(" ") Doppel Raum als Trennzeichen erstellt hat, daher instructionArray[0] die ganze Zeile enthält, da Ihr Token mit nur einem Raum angeordnet sind. Daher werden keine Ihrer Fälle in validateInstruction(String orig) zugeordnet.

Jetzt können Sie wahrscheinlich mit dem Ersetzen des doppelten Speicherplatzes auf ein einzelnes Leerzeichen im orig.split(" ") Aufruf durchkommen.

Ich kann nicht garantieren, dass dies alle möglichen Probleme lösen wird, die nach der Änderung auftreten könnten.