Мой Jtable пуст - PullRequest
       8

Мой Jtable пуст

0 голосов
/ 03 января 2011

* решено СПАСИБО ВСЕМ, КТО ПОМОГИЛ *

Здравствуйте, мой вопрос о jtable, который я имею, я заполняю его компонентами из .txt, у меня есть главное) JFrame и, нажав кнопку j, я хочу, чтобы 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 голосов
/ 04 января 2011

Есть много чего можно улучшить в вашем коде;в частности, вы должны изучить соглашения об именах Java (Компания вместо компании; company Company=new company(); точно в обратном направлении относительно того, как вы должны объявлять свои переменные).

Во-вторых, ваша иерархия классов не имеет смысла - этокомпания действительно JFrame?Нет. У вас должен быть класс Company, который содержит сотрудников, а затем класс CompanyFrame, который расширяет JFrame и имеет ссылку на объект Company.

В-третьих, вы не разложили и не изолировали проблему.Есть несколько причин, по которым ваша таблица может быть пустой.Вы уверены, что ваш код, читающий текстовый файл, работает правильно?Вы уверены, что список объектов Employee создан правильно?Самый простой способ отладки этого материала - это распечатать состояние ваших объектов в различные моменты времени и сделать утверждения (например, assert employee.size() > 0, если вы ожидаете, что в данный момент будет более одного сотрудника.)

Наконец, это относится к общему программированию - вы должны иметь возможность сканировать, прежде чем сможете работать.Другими словами, не пытайтесь заставить все работать полностью на первом проходе.Прежде чем приступить к чтению сотрудников из файлов, убедитесь, что вы можете заставить их работать с некоторыми жестко закодированными объектами сотрудников, которые вы создаете сами в коде.

Редактировать:

Одна подсказка заключается в том, что вы читаете своих сотрудников в общедоступном статическом пустом методе:

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

где вы когда-либо добавляете этих сотрудников в список сотрудников втвой кадр?У вас есть метод addEmployee, но он, кажется, не называется

...