如何基于另一个ArrayList中的值显示ArrayList中的特定项目?

时间:2018-11-22 14:05:01

标签: java swing arraylist jtable jcombobox

我当前正在执行一项任务,我必须在其中创建一个软件开发解决方案,以允许管理人员添加新的人员和任务。为此,我有一个名为ArrayList的{​​{1}},它以名称,职称和薪水为参数,还有一个名为staffMembers的数组列表,它以tasksToDo,{{1} }和taskName作为参数。

其中一项要求是使管理员能够单击taskGrade,并且只会显示其评分等于或大于所选任务的taskGrade的taskHours(使用{ {1}})。结果将显示在JButton中。

staffMembers

但是,上面的代码没有提供所需的结果,我希望我能够向我指出正确的方向。

2 个答案:

答案 0 :(得分:0)

每次匹配时都在设置model.setDataVector。此外,如果您想要等于或更高等级,(sm.grade > num1)必须具有> =比较。

此外,您不应多次使用get(i),一次执行一次,并将其存储在变量中以进行进一步的操作。或者只是使用forEach。(如果使用java8 +,则使用lambda)

private void jButtonSelectTaskActionPerformed(java.awt.event.ActionEvent evt) {                                                  

int num1 = this.jobGrade;//use the int supplied 
//by user
String[] colNames = {"Name", "Grade", "Montlhly Salary/Hourly Rate"};
DefaultTableModel model = (DefaultTableModel) staffByTaskGradeTable.getModel();

List<Object[]> rowData = new ArrayList<>();
Object[] member;
for (StaffMember sm:staffMembers) {
    if (sm.grade >= num1) {
        rowData.add(new Object[] {(Object)sm.name, (Object)sm.grade, 
                 (Object)sm.getCost()});
    }
}
model.setDataVector(rowData.toArray(new Object[rowData.size()][]), colNames);

答案 1 :(得分:0)

Object rowData[][] = new Object[staffMembers.size()][3];
for (int i = 0; i < staffMembers.size(); i++) {
    if (staffMembers.get(i).grade > num1) {

        rowData[i][0] = staffMembers.get(i).name;
        rowData[i][1] = staffMembers.get(i).grade;
        rowData[i][2] = staffMembers.get(i).getCost();

        model.setDataVector(rowData, colNames);
    }
}

请勿使用上述代码。假设所有职员都被选中,您将在2D阵列中保留空间。如果只有第一个和最后一个符合您的条件怎么办?表格中间将有一堆空行。

相反,您应该仅在满足特定条件时向模型动态添加一行数据。像这样:

String[] colNames = {"Name", "Grade", "Montlhly Salary/Hourly Rate"};
DefaultTableModel model = new DefaultTableModel(colNames, 0); // create empty model


for (int i = 0; i < staffMembers.size(); i++) {
    if (staffMembers.get(i).grade > num1) {
        Vector<Object> row = new Vector<Object>(3);
        row.add( staffMembers.get(i).name );
        row.add( staffMembers.get(i).grade );
        row.add( staffMembers.get(i).getCost() );
        model.addRow( row );
    }
}

staffByTaskGradeTable.setModel( model );

您仍然需要调试为什么“如果条件”没有达到您的期望。

或者您如何知道要替换框架上可见的表格模型中的数据。也许您必须实例化表,并且框架上仅可见一个实例。一个简单的测试,将您方法中的所有代码替换为:

DefaultTableModel model = new DefaultTableModel(5, 5); 
staffByTaskGradeTable.setModel(model);

现在,您应该看到一个包含5行5列的空表。如果可行,则问题出在您的“如果条件”。数据不是您期望的。