我正在使用Java中的pos(如openbravo或dolibarr)面板。当用户在获取产品信息后按下JButton
时,产品会添加到JTable
。但是,如果他按下按钮两次或更多次,则会再次添加相同的产品,因此我可以使用JTable
2,3或4个相同的行。这就是为什么我试图限制它。
我的想法是比较JTable
中包含产品ID的单元格和产品信息表单中包含产品ID的变量。
问题是,当我第一次打开面板时,我的JTable
为空,因此我的if
声明无效。
我需要一些建议。
jButton1.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent evt) {
if(idprod!=0)
{
montanttva1 = prixtotalttc - prixtotalht;
int row = tableaupan.getRowCount();
for (int i = 0; i < row; i++){
int test =(int) (tableaupan.getModel().getValueAt(i,0));
if (test==idprod)
{
JOptionPane.showMessageDialog(null, "Product is already in the basket !","Error",JOptionPane.ERROR_MESSAGE);
}
else
{
modele.addCaisse(new Caisse(idprod,JTitre.getText().toString(),cqte,prixunittcc,prixht,montanttva1,prixtotalht,prixtotalttc,typetva,tva));
}
}
}
else
{
JOptionPane.showMessageDialog(null, "Nothing to add in the basket !", "Errorr",JOptionPane.ERROR_MESSAGE);
}
}
});
谢谢你的评论,我理解我的逻辑错误。现在我必须在我的模型中添加这样的方法吗?
public boolean containsId(int idprod) {
*condition for true*
return true;
*condition for false*
return false;
}
答案 0 :(得分:0)
你的逻辑错误。您将ID与每行进行比较。对于每一行,如果行&#39; sID与产品ID不匹配,则添加新行。
逻辑应该是:
if (modele.containsId(idprod)) {
addProduct();
}
else {
showError();
}
现在您只需要将containsId()
方法添加到模型中。
答案 1 :(得分:0)
我找到了这个解决方案,它的确有效:
jButton1.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent evt) {
if(idprod!=0)
{
montanttva1 = prixtotalttc - prixtotalht;
int row = tableaupan.getRowCount();
for (int i = 0; i < row; i++){
if(tableaupan.getValueAt(i,0).equals(idprod))
{
OptionPane.showMessageDialog(null, "Product is already in the basket !","Error",JOptionPane.ERROR_MESSAGE);
return;
}
}
modele.addCaisse(new Caisse(idprod,JTitre.getText().toString(),cqte,prixunittcc,prixht,montanttva1,prixtotalht,prixtotalttc,typetva,tva));
}
else
{
JOptionPane.showMessageDialog(null, "Nothing to add to basket !", "Errorr",JOptionPane.ERROR_MESSAGE);
}
}
});