Значения JTableCombo не меняются во время выполнения - PullRequest
0 голосов
/ 24 марта 2012

На самом деле у меня есть JTable, в котором один Column имеет ComboBox, я хочу изменить значения JTable ComboBox во время выполнения на событии CheckBox изменение значения,Я вызываю функцию, которая возвращает мне новые значения для комбо, но значения не меняются.util.RefreshReplicatedDataAndHeader(true,objVector,-1,this, jScroll_ProductStone.getName()); - это функция, которая возвращает мне JTable данные.Он звонит AddComboBoxForJTable.Я предоставляю ту часть кода, которую я использую для изменения значений комбо и фактическую функцию, которая дает мне комбо JTable с измененным значением.Заранее большое спасибо за решение проблемы.

if (thaiFlag)
{       
    combo_Id_Name_tbl.add("Setting");// Table Name
    combo_Id_Name_tbl.add("SetID"); //Combo Id
    combo_Id_Name_tbl.add("SetThaiName");// Combo Val
    combo_Id_Name_tbl.add("Setting"); //  Identifer Of Table For Two Combo FromSameTable
    combo_Id_Name_tbl.add("Please select required Setting For Selected Lot");
    combo_Id_Name_tbl.add("SetID");// ColId For Selected Combo
    combo_Id_Name_tbl.add("SetName"); // Col Val For Selected Combo
    combo_Id_Name_tbl.add("N/A");    // Col Id For Non JTable Selected Cobo
    combo_Id_Name_tbl.add("N/A"); // Combo Filter Col Name
    combo_Id_Name_tbl.add("N/A"); // Combo Filter Col Value
    ColId_Val_Identifier_TableName_ForCombo.add(combo_Id_Name_tbl);       
}
else
{
    combo_Id_Name_tbl.add("Setting");// Table Name
    combo_Id_Name_tbl.add("SetID"); //Combo Id
    combo_Id_Name_tbl.add("SetName");// Combo Val
    combo_Id_Name_tbl.add("Setting"); //  Identifer Of Table For Two Combo From Same Table
    combo_Id_Name_tbl.add("Please select required Setting For Selected Lot");
    combo_Id_Name_tbl.add("SetID");// ColId For Selected Combo
    combo_Id_Name_tbl.add("SetName"); // Col Val For Selected Combo
    combo_Id_Name_tbl.add("N/A");    // Col Id For Non JTable Selected Cobo
    combo_Id_Name_tbl.add("N/A"); // Combo Filter Col Name
    combo_Id_Name_tbl.add("N/A"); // Combo Filter Col Value
    ColId_Val_Identifier_TableName_ForCombo.add(combo_Id_Name_tbl);
}


    TableColumnModel tcm = jtblSizeInfo.getColumnModel();
    objVector=null;
    objVector=new Vector<Object>();
    objVector.add(data_SizeInfo);
    objVector.add(header_SizeInfo);
    objVector.add(data_ForSave_SizeInfo);
    objVector.add(colHeader_ForSave_SizeInfo);
    objVector.add(AddedCols_Name_Pos);
    objVector.add(ColId_Val_Identifier_TableName_ForCombo);
    objVector.add(tcm);
    Vector<Object> objResultVector = util.RefreshReplicatedDataAndHeader(true, objVector,-1, this, jScroll_ProductStone.getName());


    data_SizeInfo =(Vector<Vector<String>>)objResultVector.get(0) ;
    header_SizeInfo=(Vector<String>)objResultVector.get(1) ;
    data_ForSave_SizeInfo =(Vector<Vector<String>>)objResultVector.get(2) ;
    colHeader_ForSave_SizeInfo=(Vector<String>)objResultVector.get(3) ; 
    TableColumnModel tcm1 = (TableColumnModel)objResultVector.get(4);



    // Column Model Is used to get the Columns And Action Listnner Added In Utility Form 
    Vector<TableColumn> vtc = new Vector<TableColumn>();
    int colCount_Ref = tcm.getColumnCount();

    for (int i=0;i<colCount_Ref;i++ )
    {
        vtc.add(tcm.getColumn(i));        
    }


    for (int i=0;i<vtc.size();i++ )
    {             
        tcm.removeColumn(vtc.get(i) ); 
    }

    for (int i=0;i<tcm1.getColumnCount();i++ )
    {
        tcm.addColumn(tcm1.getColumn(i)); 
    }
    jtblSizeInfo.setColumnModel(tcm);
    jtblSizeInfo.repaint();
    jtblSizeInfo.revalidate();
}

Код для добавления поля со списком для JTable выглядит следующим образом:

public void  AddComboBoxForJTable( int colIndex,Vector<String>vectTable_JtblColIdVal_ComboIdentify, int selectedRow,Object          currentFormObj,String currentJScrollPane ) 
{   
    ////// JComboBox comboBox=null;  
    try 
    {
        String tableName =vectTable_JtblColIdVal_ComboIdentify.get(0);
        String comboId =vectTable_JtblColIdVal_ComboIdentify.get(1);
        String comboValue =vectTable_JtblColIdVal_ComboIdentify.get(2);
        String comboIdentifier =vectTable_JtblColIdVal_ComboIdentify.get(3);
        String comboFilterColName =vectTable_JtblColIdVal_ComboIdentify.get(8);
        String comboFilterColValue =vectTable_JtblColIdVal_ComboIdentify.get(9);
        Vector<String> comboFilter =new Vector<String>();
        comboFilter.add(comboFilterColName);
        comboFilter.add(comboFilterColValue);

        Vector<Vector<String>> comboData=new Vector<Vector<String>>();
        //JComboBox comboBox;  
        DBEngine dbe = new DBEngine();
        if (comboFilterColName.equals("N/A"))
        {
            comboData = dbe.getComboData(tableName, comboId, comboValue,comboValue);
        }
        else 
        {
            comboData = dbe.getComboData(tableName, comboId, comboValue,comboValue,comboFilter);   
        }

        Vector model = new Vector();       

        for (int i =0;i<comboData.size();i ++)
        {                    
            //  model.addElement( new CustomizedComboBox(3, "train" ) );  
            String id =comboData.get(i).elementAt(0).toString();
            String data= comboData.get(i).elementAt(1).toString();
            Item_ it=  new Item_(id,data );

            model.addElement( it );        

        }


        JComboBox comboBox = new JComboBox( model );     


        MyActionListenerForJtableCombo_Utility actionListener = new MyActionListenerForJtableCombo_Utility( 
        vectTable_JtblColIdVal_ComboIdentify, selectedRow,   currentFormObj,    currentJScrollPane);    
        actionListener.util=this;
        actionListener.tableName=tableName;

        comboBox.addActionListener(actionListener);  




        // DefaultTableModel tblModel = (DefaultTableModel)jtblUtilities.getModel();
        TableColumn column= jtbl_General.getColumnModel().getColumn(colIndex);
        column.setCellEditor(new javax.swing.DefaultCellEditor(comboBox));
    } 
    catch (Exception ex)
    {
        ex.printStackTrace();
        //  Logger.getLogger(ComboBoxEditor.class.getName()).log(Level.SEVERE, null, ex);
    }
}

1 Ответ

2 голосов
/ 24 марта 2012

Никогда еще не помещайте компоненты Swing непосредственно в модель стола. С этим связано множество проблем, от правильной перерисовки до передачи событий клавиш и мыши.

Что вы хотите сделать, это объявить JComboBox в качестве редактора по умолчанию . Я думаю, что это даже редактор по умолчанию для массивов строк (например, JCheckBox является редактором по умолчанию для логических значений). Так что вам просто нужно поместить эти массивы в модель и позволить магии JTable сделать всю работу за вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...