Приложение с графическим интерфейсом для отображения записи сотрудника по одному и остановки в конце записи - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть эта программа, которая позволяет пользователю нажимать кнопку «Далее» или «Предыдущий», чтобы просмотреть записи сотрудников. У меня есть 4 сотрудника в txt. Проблема в том, что когда я нажимаю «Следующий» или «Предыдущий», он продолжает читать, переданный последним сотрудником в записи.Что я могу изменить, чтобы остановить его? Пожалуйста, сообщите.

Здесь часть кода слушателя действия.

    public Employee1(EmployeeDataSet employees) 
     {

        this.numberOfEmployees = employees.getEmployeeCount();
        this.employees = employees;
     } 

    public void loadEmployeeInGUI(Employee e)
    {
        // set text field with name
        Q1Field.setText(e.getName());
        // set text field with title
        Q2Field.setText(e.getName());
        // set textfield with salary
        Q3Field.setText(String.valueOf(e.getSalary()));
    }

    public void actionPerformed(ActionEvent x)
   {
        if (x.getSource() == Next)
   {
            index++;

            if(index == this.numberOfEmployees) index=0;
            Employee e = employees.getEmployeeAtIndex(index);
            loadEmployeeInGUI(e);
    }
    }
        if (x.getSource() == Previous) index--;
        if (index ==-1) index = this.numberOfEmployees -1;
    }

Ответы [ 3 ]

4 голосов
/ 12 декабря 2011

Этот код использует Java Swing. При этом вы должны использовать CardLayout. Связав отдельного Employee с каждой «карточкой», вы сможете легко перемещаться (вперед и назад) по записям.

Этот подход, по сути, делегирует «тяжелую работу» менеджеру макета, как и должно быть.

2 голосов
/ 13 декабря 2011

Я не согласен с CardLayout. Использование CardLayout означает, что вы создадите Component для каждого Employee, что может быть значительным числом. В вопросе упоминается, что в настоящее время у него есть только 4 Employee экземпляра, для которых вы все еще можете выбрать CardLayout, но он вообще не масштабируется.

Наличие пользовательского интерфейса, на котором вы можете «установить» Сотрудника и которое будет соответствующим образом обновлять его значение (как это уже имеет место в коде, приведенном в стартовом посте), похоже на путь.

Трудно сказать, почему его конкретный код не приводит к желаемому поведению, так как скобки открытия / закрытия, похоже, не совпадают, и мы не знаем, как это EmployeeDataSet реализовано. Но я предпочитаю используемый подход выше CardLayout

1 голос
/ 13 декабря 2011

Я бы лично перестроил следующее:

public void actionPerformed(ActionEvent x) {

    // handle increment / decrement
    if (x.getSource() == Next) {
        index++;
    }
    if (x.getSource() == Previous) {
        index--;
    }

    // range check
    if( index > this.numberOfEmployees ) {
        index = 0;
    }
    if( index < 0 ) {
        index = this.numberOfEmployees - 1;
    }

    // load up data
    Employee e = employees.getEmployeeAtIndex(index);
    loadEmployeeInGUI(e);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...