Java GUI应用程序一次显示一条员工记录,并在记录末尾停止

Java GUI应用程序一次显示一条员工记录,并在记录末尾停止,java,swing,Java,Swing,我有一个程序,允许用户单击“下一步”或“上一步”查看员工记录。我的txt中有4名员工。问题是,当我单击“下一步”或“上一步”时,它会一直读取记录中的最后一名员工。我可以更改什么来停止它?请告知 这里是代码的操作侦听器部分 public Employee1(EmployeeDataSet employees) { this.numberOfEmployees = employees.getEmployeeCount(); this.employ

我有一个程序,允许用户单击“下一步”或“上一步”查看员工记录。我的txt中有4名员工。问题是,当我单击“下一步”或“上一步”时,它会一直读取记录中的最后一名员工。我可以更改什么来停止它?请告知

这里是代码的操作侦听器部分

    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;
    }

这段代码似乎正在使用JavaSwing。也就是说,你应该使用。通过将单个员工与每张卡关联,您可以轻松地在记录中前后导航


这种方法本质上是将繁重的工作委托给布局管理器,这就是它应该做的。

我不同意CardLayout。使用CardLayout意味着您将为每个员工创建一个组件,这可能是一个重要的数字。 问题中提到,他目前只有4个员工实例,您仍然可以选择CardLayout,但它根本无法扩展

拥有一个用户界面,您可以在上面“设置”一名员工,并将相应地更新其值,因为在开始文章中提供的代码中已经出现了这种情况,这似乎是一个不错的选择


很难说为什么他的特定代码没有产生所需的行为,因为打开/关闭大括号似乎不匹配,我们也不知道这个EmployeeDataSet是如何实现的。但我更喜欢使用高于卡片布局的方法

我个人会按照以下方式进行重组:

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);
}

你的打开/关闭支架的排列方式有点奇怪。他们是在你写问题的时候在翻译中迷失了方向,还是他们在代码中的样子?具体来说,为什么actionPerformed方法的开头有两个大括号?这意味着我必须将Gui部分更改为CardLayout。是否有任何可以添加或更改的内容,以便它只读取特定数量的员工?谢谢CardLayout提示。@Angel918:不一定。对于不同的员工类型,您只需要不同的布局。您的所有员工看起来都一样,所以一个布局就可以了。但它根本不可伸缩。一个典型的图形用户界面可以轻松容纳10到数千张卡片,而你典型的人力资源员工每天只看几百张,我无法理解你为什么认为它“根本不可伸缩”。因为你必须制作它们。打开面板以显示员工详细信息需要为每个员工创建一个组件,并将其添加到cardlayout。如果一天只看几百个的话,你会从中得到什么?我同意重新使用一个“employeeDetails”组件更有意义,但我反对“根本不可伸缩”的说法。你的话,不是我的。我坚持我的话。例如,对于存储所有员工详细信息的DB,您必须查询所有员工的DB,为所有员工创建组件,将它们全部添加到cardlayout,然后显示一名员工的详细信息。当然,您可以对DB查询进行分页,但在这种情况下使用CardLayout的目的是什么。因此,我的“不可扩展”是CPU和内存的性能方面,而不是代码方面,这归结为简单的for loopcard布局,只有在某些员工需要不同的布局时才需要:s/根本不可扩展/在此上下文中不必要/。这是一个使用单一布局在图像之间导航的应用程序+1为更简单的方法辩护。