自动完成JCombo Box(Java2S)在Change Event上设置了错误的值

时间:2012-11-08 09:09:28

标签: java swing autocomplete jtable jcombobox

尊重Question!通过abg和回答mKorBel。

使用J2 Auto Complete Combo Box

答案中的代码由mKorBel For My Case在下面的代码中有另一个问题,当我编辑第三行时,它工作正常,但当我点击第一行进行编辑时,它将第一行的值设置为选定的第3行行。

    comboBox.addActionListener(new ActionListener() 
    {

       public void actionPerformed(ActionEvent e) 
       {

          JComboBox comboBox = (JComboBox) e.getSource();
          String    itemStr= comboBox.getSelectedItem().toString();
          int  selectedRowLocal= tblDetailInfoParts.getSelectedRow();

          if (selectedRowLocal != -1) 
          {
             if ((itemStr != null) && (itemStr.compareTo("") != 0) ) 
             {
                tblDetailInfoParts.setValueAt(itemStr, selectedRowLocal, 15);
             }

          }

       }
    });

1 个答案:

答案 0 :(得分:1)

我没有添加动作侦听器到comboBox(即添加到JTable),而是添加了Rob Camick's Table Cell Listener!在我添加comboBox的单元格中,我听了改变,这对我来说非常有效。 (我之前关于Java2s自动完成组合框的问题的评论指出 @mKorbel

 private void formWindowOpened(java.awt.event.WindowEvent evt) 
 {
    AddingPartsChangeEvent();
 }     

My Table Cell Listener To My JTable的代码如下

   private void addingPartsChangeEvent() 
   {

      Action actionProd = new AbstractAction() 
      {

         public void actionPerformed(ActionEvent e) 
         {
            try 
            {
               boolean newChk = false;
               TableCellListener tcl = (TableCellListener) e.getSource();
               int selectedRow = tcl.getRow();
               int selectedCol = tcl.getColumn();

               if (selectedCol == 4) 
               {
                  Object partO = tcl.getNewValue();
                  String design = null;
                  String partStr = partO.toString();
                  tblDetailInfoParts.setValueAt(partStr,selectedRow, 15) ;
               }

            } 
            catch (Exception ex) 
            {
               ex.printStackTrace();
            }
         }
      };
      TableCellListener tclProd = new TableCellListener(tblDetailInfoParts,
      actionProd);
    }