Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将XML元素放入JTable_Java_Xml_Swing_Jtable_Sax - Fatal编程技术网

Java 将XML元素放入JTable

Java 将XML元素放入JTable,java,xml,swing,jtable,sax,Java,Xml,Swing,Jtable,Sax,我试图用Java中的sax解析器解析xml文件,然后用xml元素填充JTable。解析做得很好,创建了JTable,但问题是所有元素都放在同一行中,并且重复同一行。请帮忙。这是我的密码: package read; //import java.util.ArrayList; import java.awt.BorderLayout; import java.util.ArrayList; import java.util.List; import java.util.Vector; impor

我试图用Java中的sax解析器解析xml文件,然后用xml元素填充
JTable
。解析做得很好,创建了
JTable
,但问题是所有元素都放在同一行中,并且重复同一行。请帮忙。这是我的密码:

package read;

//import java.util.ArrayList;
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class Read {

    public static Vector<Vector> rowData = new Vector<Vector>();
    public static Vector<String> rowOne = new Vector<String>();

    public static void main(String argv[]) {
        try {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();
            DefaultHandler handler;
            handler = new DefaultHandler() {
                // private List<Personne> satff;
                boolean bstaff = false;
                boolean bfname = false;
                boolean blname = false;
                boolean bnname = false;
                boolean bsalary = false;
                private int i;

                public void startElement(String uri, String localName, String
                    qName, Attributes attributes) throws SAXException {
                    System.out.println("Start Element :" + qName);
                    if (qName.equalsIgnoreCase("staff")) {
                        bstaff = true;
                    }
                    if (qName.equalsIgnoreCase("FIRSTNAME")) {
                        bfname = true;
                    }
                    if (qName.equalsIgnoreCase("LASTNAME")) {
                        blname = true;
                    }
                    if (qName.equalsIgnoreCase("NICKNAME")) {
                        bnname = true;
                    }
                    if (qName.equalsIgnoreCase("SALARY")) {
                        bsalary = true;
                    }
                }

                public void endElement(String uri, String localName,
                    String qName) throws SAXException {
                    System.out.println("End Element :" + qName);
                    if ("staff".equals(qName)) {
                        rowData.addElement(rowOne);
                    };
                }

                @Override
                public void characters(char ch[], int start, int length) {
                    if (bfname) {
                        String s = new String(ch, start, length);
                        rowOne.addElement(s);
                        System.out.println("First Name : " + new String(ch, start, length));
                        bfname = false;
                    }
                    if (blname) {
                        rowOne.addElement(new String(ch, start, length));
                        System.out.println("Last Name : " + new String(ch, start, length));
                        blname = false;
                    }
                    if (bnname) {
                        rowOne.addElement(new String(ch, start, length));
                        System.out.println("Nick Name : " + new String(ch, start, length));
                        bnname = false;
                    }
                    if (bsalary) {
                        rowOne.addElement(new String(ch, start, length));
                        System.out.println("Salary : " + new String(ch, start, length));
                        //rowData.addElement(rowOne);
                        bsalary = false;
                    }
                    System.out.println("longueur" + rowOne.size());
                }
            };
            saxParser.parse("file.xml", handler);
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Vector<String> columnNames = new Vector<String>();
            columnNames.addElement("firstname");
            columnNames.addElement("lastname");
            columnNames.addElement("nickname");
            columnNames.addElement("salary");
            columnNames.addElement(" ");
            columnNames.addElement(" ");
            columnNames.addElement(" ");
            columnNames.addElement(" ");
            JTable table = new JTable(rowData, columnNames);
            JScrollPane scrollPane = new JScrollPane(table);
            frame.add(scrollPane, BorderLayout.CENTER);
            frame.setSize(300, 150);
            frame.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
包读取;
//导入java.util.ArrayList;
导入java.awt.BorderLayout;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Vector;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.xml.parsers.SAXParser;
导入javax.xml.parsers.SAXParserFactory;
导入org.xml.sax.Attributes;
导入org.xml.sax.SAXException;
导入org.xml.sax.helpers.DefaultHandler;
公开课阅读{
公共静态向量rowData=新向量();
公共静态向量rowOne=新向量();
公共静态void main(字符串argv[]){
试一试{
SAXParserFactory=SAXParserFactory.newInstance();
SAXParser SAXParser=factory.newSAXParser();
默认处理程序;
handler=新的DefaultHandler(){
//私人名单;
布尔bstaff=false;
布尔bfname=false;
布尔blname=false;
布尔bnname=false;
布尔值bsalary=false;
私人互联网i;
public void startElement(字符串uri、字符串localName、字符串
qName、属性)引发SAXException{
System.out.println(“起始元素:+qName”);
if(qName.equalsIgnoreCase(“员工”)){
bstaff=真;
}
if(qName.equalsIgnoreCase(“FIRSTNAME”)){
bfname=true;
}
if(qName.equalsIgnoreCase(“LASTNAME”)){
blname=true;
}
if(qName.equalsIgnoreCase(“昵称”)){
bnname=true;
}
if(qName.equalsIgnoreCase(“工资”)){
b拉里=真;
}
}
public void endElement(字符串uri、字符串localName、,
字符串(qName)引发异常{
System.out.println(“结束元素:+qName”);
if(“staff”.equals(qName)){
rowData.addElement(rowOne);
};
}
@凌驾
公共无效字符(字符ch[],整数开始,整数长度){
if(bfname){
字符串s=新字符串(ch、开始、长度);
第1行。附录;
System.out.println(“名字:+新字符串(ch,start,length));
bfname=false;
}
如果(blname){
addElement(新字符串(ch,start,length));
System.out.println(“姓氏:+新字符串(ch,start,length));
blname=false;
}
如果(bnname){
addElement(新字符串(ch,start,length));
System.out.println(“昵称:+新字符串(ch,start,length));
bnname=false;
}
如果(b拉里){
addElement(新字符串(ch,start,length));
System.out.println(“工资:+新字符串(ch,start,length));
//rowData.addElement(rowOne);
b报警=假;
}
System.out.println(“longueur”+rowOne.size());
}
};
parse(“file.xml”,handler);
JFrame=新JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
向量列名称=新向量();
columnNames.addElement(“名字”);
columnNames.addElement(“lastname”);
columnNames.addElement(“昵称”);
列名。附录(“工资”);
columnNames.addElement(“”);
columnNames.addElement(“”);
columnNames.addElement(“”);
columnNames.addElement(“”);
JTable table=新的JTable(行数据、列名称);
JScrollPane scrollPane=新的JScrollPane(表);
frame.add(滚动窗格,BorderLayout.CENTER);
框架。设置尺寸(300150);
frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
}
我的原始XML文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<company>
<staff >
<firstname>yong</firstname>
<lastname>mook kim</lastname>
<nickname>mkyong</nickname>
<salary>100000</salary>
</staff>
<staff >
<firstname>low</firstname>
<lastname>yin fong</lastname>
<nickname>fong fong</nickname>
<salary>200000</salary>
</staff>
</company>

勇
木金
mkyong
100000
低的
尹芳
芳芳
200000
我得到的表格如下:![在此处输入图像描述][1]


我不明白是什么错误

在您的
startElement
方法中,更改为:

if (qName.equalsIgnoreCase("staff"))
{
    rowOne = new Vector<String>();  
    bstaff = true;
}
if(qName.equalsIgnoreCase(“staff”))
{
rowOne=新向量();
bstaff=真;
}

其他
if
语句保持不变。每个
staff
元素都放在
向量中

1)对代码块使用一致的逻辑缩进。代码的缩进旨在帮助人们理解程序流程!2)
![在此处输入图像描述][1]
此处出现问题。如果您有相关的屏幕截图,请将其上载到图像共享网站并链接到它。我找不到您的图像链接。