【问题标题】:The Auto Complete JCombo Box (Java2S) sets wrong value on Change Event自动完成 JComboBox (Java2S) 在更改事件上设置错误值
【发布时间】:2012-11-10 10:31:22
【问题描述】:

参考Question!由 abg 和由 mKorBel 回答。

并使用 J2s Auto Complete Combo Box!

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

    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);
             }

          }

       }
    });

【问题讨论】:

  • 仍然无法正确格式化您的代码?请加倍努力......并记住:这个论坛格式化软件不喜欢标签:-)
  • 至于你的问题:为什么坚持使用未维护的过时的 - 在侏罗纪的范围内 - 代码示例?自动完成并非易事......所以使用像 f.i 这样的现代、维护良好的实现。 SwingX
  • 我在最后一个问题中提到了我尝试过 SwingX 但我的主要要求没有满足,当我输入字符时,长列表没有被过滤,这个问题被 mKorbel 接受,他建议这个解决方案我的问题。
  • “过滤”是什么意思?无论如何,请注意,如果您想使用 swingX 自动完成作为编辑组件,您需要使用 ComboBoxCellEditor 而不是核心。
  • @kleopatra 基本上,当您键入时,匹配项在下拉列表中被选中,而不是列表被过滤以仅显示匹配结果 - 这是我们选择不使用它的原因之一

标签: java swing autocomplete jtable jcombobox


【解决方案1】:

我没有将动作监听器添加到组合框(即添加到 JTable),而是添加了Rob Camick's Table Cell Listener!在我添加了组合框的单元格中,我听到了对我来说非常有效的变化。 (这在 @mKorbel 对 Java2s Autocomplete Combo Box 的上一个问题的评论中指出)

 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);
    }

【讨论】:

  • @kleopatra 你能说出这种格式有什么问题吗?我使用 Camel 表示法进行变量声明。
  • 你现在可以看到我已经使用here格式化了代码!
猜你喜欢
  • 2011-09-12
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
相关资源
最近更新 更多