我当前正在执行一项任务,我必须在其中创建一个软件开发解决方案,以允许管理人员添加新的人员和任务。为此,我有一个名为ArrayList
的{{1}},它以名称,职称和薪水为参数,还有一个名为staffMembers
的数组列表,它以tasksToDo
,{{1} }和taskName
作为参数。
其中一项要求是使管理员能够单击taskGrade
,并且只会显示其评分等于或大于所选任务的taskGrade的taskHours
(使用{ {1}})。结果将显示在JButton
中。
staffMembers
但是,上面的代码没有提供所需的结果,我希望我能够向我指出正确的方向。
答案 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列的空表。如果可行,则问题出在您的“如果条件”。数据不是您期望的。