2016-03-26 7 views
0

私は正常に動作するようですSAXを使用してXMLファイルを解析し、javaファイルを持っています。しかし、私はGUIでこれを提示するよう求めてきたJavaのGUIはアドバイス

public class SAX extends DefaultHandler{ 
    private final List<Student> studentList = new ArrayList<Student>(); 
    private String tempVal; 
    private Student tempStudent; 

public void runExample(){ 
    parseDocument(); 
    outputList(); 
} 

private void parseDocument(){ 
    try { 
     // get a factory object 
     SAXParserFactory spf = SAXParserFactory.newInstance(); 

     // get an instance of the parser 
     SAXParser sp = spf.newSAXParser(); 

     // parse the XML file and register this 
     // class for callbacks 
     sp.parse("Students.xml", this); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 
private void outputList(){ 
    for(Student student : studentList){ 
     System.out.println(student); 
    } 
} 

// the event handlers.... 
@Override 
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
    // reset 
    tempVal = ""; 
    if(qName.equalsIgnoreCase("Student")){ 
     // create a new Employee object 
     tempStudent = new Student(); 
     tempStudent.setTitle(attributes.getValue("Title")); 
    } 
//  System.out.println(
//    "startElement::qName is "+qName); 
} 

@Override 
public void characters(char []ch, int start, int length) throws SAXException{  
    tempVal = new String(ch, start, length); 
//  System.out.println("tempVal is "+tempVal); 
} 

@Override 
public void endElement(String uri, String localname, String qName) throws SAXException { 
    if(qName.equalsIgnoreCase("Student")){ 
     studentList.add(tempStudent); 
    } else if(qName.equalsIgnoreCase("Name")){ 
     tempStudent.setName(tempVal); 
    } else if(qName.equalsIgnoreCase("Age")){ 
     tempStudent.setAge(Integer.parseInt(tempVal)); 
    } else if(qName.equalsIgnoreCase("College")){ 
     tempStudent.setCollege(tempVal); 
    } else if(qName.equalsIgnoreCase("School")) { 
     tempStudent.setSchool(tempVal); 
    } 
} 

public static void main(String []args){ 
    SAX spe = new SAX(); 
    spe.runExample(); 
} 
} 

以下は、私のSAX.javaファイルです。特定のラジオボタンがクリックされ、ユーザーが解析をクリックすると、XMLファイルがSAXを使用して解析され、結果がテキストボックスに表示されます。私はGUIを与えられている、それはすでにコード化されている、私の問題は、GUIの限られた知識を持っていると私はそれらの2つを統合する手掛かりを持っていない。

public void actionPerformed(ActionEvent e) { 
else if (e.getSource() == parseButton){ 
     if(saxRadioButton.isSelected()){ 
      // do SAX stuff 
     } 

私はちょうど正しい方向に私を指す人を捜しています。 SAXファイルを別に作成するか、If文に直接記述する必要があります。私は完全に失われています。

+0

GUIからSAXファイルのメソッドを呼び出します。パースされたコンテンツを返すメソッドを提供するように変更し、単にGUIを操作して呼び出すだけです。 – ChiefTwoPencils

+0

@ChiefTwoPencils迅速な対応をありがとう。私はまだ何をすべきかについては100%明確ではないんだけど、私はSAXファイルに以下を追加しました: 公共一覧 GETLIST(){リターンstudentList。 } 、その後は、GUIでそれを呼び出し: IF(saxRadioButton.isSelected()){SAXサックス=新しいSAX()。リスト studentList = sax.getList(); for(学生学生:学生リスト){System.out.println(student); }} ただし、空の角括弧([])を印刷しているだけです。私はとてもゆっくりとしてごめんなさい! – User9123

答えて

0

は、あなたのSAXクラスから解析されたXMLを取得し、必要なコンポーネントに設定します。あなたのプロセスからGUIを分離することは理にかなっており、より簡単にデバッグすることができます。例:

public void actionPerformed(ActionEvent e) { 
    if(e.getSource().equals(parseButton)){ 
     if(saxRadioButton.isSelected()) { 
      String result = SAX.yourParsingHere(); 
      yourTextArea.setText(result); 
     } 
    } 
} 
+0

迅速な対応をありがとうございます。私はまだ何をすべきかについては100%明確ではないんだけど、私はSAXファイルに以下を追加しました: 公共一覧 GETLIST(){リターンstudentList。 } 、その後は、GUIでそれを呼び出し: IF(saxRadioButton.isSelected()){SAXサックス=新しいSAX()。リスト studentList = sax.getList(); for(学生学生:学生リスト){System.out.println(student); }} ただし、空の角括弧([])を印刷しているだけです。私はとてもゆっくりとしてごめんなさい! – User9123

+0

これはおそらく、学生リストをListstudentListに追加するプロセスが正しく機能していないことを意味します。 –