我的Jtable是空白的

时间:2011-01-03 20:00:35

标签: swing jtable jframe text-files

* 感谢所有帮助过的人

你好我的q是关于我有的jtable,我用.txt中的组件填充它,我有一个主(菜单)JFrame,并按下jbutton我希望jtable弹出!我的问题是我的jtable是空白的,它应该显示一些日期!我会感激任何帮助,谢谢。 这是我的“阅读”课程

public static void main(String[] args) {
     company Company=new company();
    payFrame jframe=new payFrame(Company);
    jframe.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
    jframe.setSize(600,300);
    jframe.setVisible(true);
     readClass();
}
    //diavasma
  public static void readClass(){
    ArrayList<Employee> emp =new ArrayList<Employee>() ;
    //Employee[] emp=new Employee[7];
    //read from file
 try {

   int i=0;
   // int rowCounter;
   // int payments=0;

String inputDocument = ("src/Employees.txt");


FileInputStream is = new FileInputStream(inputDocument);
Reader iD = new InputStreamReader(is);


BufferedReader buf = new BufferedReader(iD);
String inputLine;
while ((inputLine = buf.readLine()) != null) {
            String[] lineParts = inputLine.split(",");

            String email = (lineParts[7]);
            int EmpNo = Integer.parseInt(lineParts[0]);
            String type = lineParts[10];
            int PostalCode = Integer.parseInt(lineParts[5]);
            int phone = Integer.parseInt(lineParts[6]);
            int DeptNo = (short) Integer.parseInt(lineParts[8]);
            double Salary;
            int card = (short) Integer.parseInt(lineParts[10]);
            int emptype = 0;
             int hours=Integer.parseInt(lineParts[11]);
            if (type.equals("FULL TIME")) {
                emptype = 1;
            } else if (type.equals("SELLER")) {
                emptype = 2;
            } else {
                emptype = 3;
            }

            /**
             *  Creates employee instances depending on their type of employment
             *  (fulltime=1, salesman=2, parttime=3)
             */
            switch (emptype) {
                case 1:


                    Salary = Double.parseDouble(lineParts[10]);
                    emp.add(new FullTime(lineParts[1], lineParts[2], EmpNo, 
                            lineParts[3],
                            lineParts[4], PostalCode, phone,
                            email, DeptNo, card, Salary,hours, type));

                    i++;
                    break;

这是我的班级,我在那里制作Jtable并填充他

public class company extends JFrame {
    private ArrayList<Employee> emp = new ArrayList<Employee>();
    public void addEmployee(Employee emplo) {

    emp.add(emplo);
}

public ArrayList<Employee> getArray() {
    return emp;
}

public  void getOption1() {

     ArrayList<Employee> employee = getArray();
    JTable table = new JTable();
    DefaultTableModel model = new DefaultTableModel();
    table.setModel(model);
    model.setColumnIdentifiers(new String[]{"Code", "First Name", "Last Name", "Address", "City", "Postal Code", "Phone", "Email",
                "Dept Code", "Salary", "Time Card", "Hours"});
    for (Employee current : employee) {
        model.addRow(new Object[]{current.getempCode(), current.getfirst(), current.getlast(),
                    current.getaddress(), current.getcity(), current.getpostalCode(),
                    current.gettelephone(), current.getemail(), current.getdep(),
                    current.getsalary(), current.getcardcode(), current.getHours()
                });

    }


    table.setPreferredScrollableViewportSize(new Dimension(500, 50));
    table.setFillsViewportHeight(true);
    JScrollPane scrollPane = new JScrollPane(table);
    add(scrollPane);
   setVisible(true);

    table.revalidate();

1 个答案:

答案 0 :(得分:0)

有很多可以改进的代码;特别是你应该学习Java命名约定(公司而不是公司; company Company=new company();完全是你应该如何声明你的变量的倒退。)

其次,您的类层次结构没有意义 - 公司真的是JFrame吗?不可以。您应该有一个公司类来保存员工,然后是一个CompanyFrame类,它扩展了JFrame并且引用了Company对象。

第三,你没有分解或隔离问题。您的表格可能为空白有多种原因。您确定阅读文本文件的代码是否正常工作?您确定正确创建了Employee对象列表吗?调试这些东西的最简单方法是在不同的时间点打印出对象的状态并进行断言(例如assert employee.size() > 0,如果您希望在给定点上有多个员工。)

最后,这适用于一般编程 - 您必须能够在运行之前进行爬网。换句话说,不要试图让第一遍完全正常工作。在处理从文件中读取员工之前,请确保您可以在代码中使用您自己创建的一些硬编码员工对象。

编辑:

一个线索是,您使用公共静态void方法读取您的员工:

public static void readClass(){
    ArrayList<Employee> emp =new ArrayList<Employee>() ;

您在哪里将这些员工添加到您框架中的员工arraylist中?你有一个addEmployee方法,但它似乎没有被称为