gpt4 book ai didi

java - JTable:如何避免重复行和聚合项目数量

转载 作者:行者123 更新时间:2023-12-01 22:37:32 25 4
gpt4 key购买 nike

我是一名软件开发新手,对 Java 桌面和 Web 应用程序感兴趣。我正在编写一个桌面应用程序,仅使用 Swing 组件,该组件读取代码,并通过从数据库检索相关字段,将它们写入 JTable 中。我遇到了麻烦,因为程序会在我输入代码时多次添加具有相同代码的新行,而不是增加已输入代码的数量列。

我希望程序对第一列执行检查,方法是在每一行上迭代搜索,直到找到代码(如果存在)或到达最后一行。如果是新代码,则必须添加一行,如果是已输入的代码,则实际商品数量必须增加一。以下是我的解决方案,不起作用,您可以帮忙吗?感谢您的关注。

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

try {

item = Item.findItem(itemTextField.getText(), DeskApp.conn);

// Definition and initialisation of control variables pertaining "while" cycle
boolean isCodePresent = false;
int row = 0;
double discount = 0.0d;
double colSum = 0.0d;

// Discounted price = unit price * qty * (1 - discount)

while (!isCodePresent && row < defMod.getRowCount()) {

// Code already present: add quantity

if (item.getCode() == defMod.getValueAt(row, 0)) {
int actualQty = (int)defMod.getValueAt(row, 4);
defMod.setValueAt(++actualQty, row, 4);
double unitPrice = (double) defMod.getValueAt(row, 3);
discount = (double)defMod.getValueAt(row, 5);
double totRow = unitPrice * actualQty * (100 - discount) / 100;
defMod.setValueAt(totRow, row, 6);
double discountedPrice = (double)defMod.getValueAt(row, 3) *
(double)defMod.getValueAt(row, 4) *
((100 - (double)defMod.getValueAt(row, 5) / 100));
defMod.setValueAt(discountedPrice, row, 6);
isCodePresent = true;
}

row++;
}

// Code not yet present: add row

if (!isCodePresent) {
MyButton buttonAdd = new MyButton(MyButton.BEHAVIOUR_ADD, table.getRowCount());
MyButton buttonRemove = new MyButton(MyButton.BEHAVIOUR_REMOVE, table.getRowCount());
MyButton buttonDeleteRow = new MyButton(MyButton.BEHAVIOUR_DELETE_ROW, table.getRowCount());

buttonAdd.setText("+1");
buttonRemove.setText("-1");
buttonDeleteRow.setText("Delete row");

DecimalFormat digitFormat = new DecimalFormat("#.##");

for (int i = 0; i < defMod.getRowCount(); i++) {
colSum += (double) defMod.getValueAt(i, 6);
}

double discountedPrice = (double)defMod.getValueAt(row, 3) *
(double)defMod.getValueAt(row, 4) *
((100 - (double)defMod.getValueAt(row, 5) / 100));
defMod.addRow(new Object[]{item.getCode(), item.getOtherCode(),
item.getDescription(), item.getPrice(), 1, discount,
item.getPrice(), buttonAdd, buttonRemove, buttonDeleteRow});
}

最佳答案

您似乎正在将组件直接添加到TableModel。而是使用适当的 renderer and editor .

或者,为了适应不可预测的数据库延迟,请在 SwingWorker 的后台查询数据库。 、publish() 临时结果,并更新 process() 实现中的 TableModel。可以看到从平面文件读取的相关示例 here .

关于java - JTable:如何避免重复行和聚合项目数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26679396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com