Jtable + jTree обновеление таблицы по условию

 
0
 
Java
ava
Rat | 19.03.2013, 08:48
Добрый день, помогите решить следующую задачу
Есть Таблица (Jtable) и дерево(jTree)
мне необходимо что бы данные в Jtabel изменялись в соотвествии с выбраным
обьектом уровня чилдрен в дереве.
--------------
Jtablemodel

public class jTabel_t extends AbstractTableModel{
    private static final long serialVersionUID = 1L;
    private String[] ColumnName;//={"Name","x","y"};
    private int ColumnCount;
    private int RowCount;
    private ArrayList<String> name;
    private ArrayList<Double> x;
    private ArrayList<Double> y;
    /*обьявляем переменную запроса*/
    private jSql_qveri qveri;



    public int getRowCount(){
        return RowCount;
    }

    public int getColumnCount(){
        return ColumnCount;
    }
    @Override
public Object getValueAt(int r,int c){
        String str = new String();
        try {
            str= (String) qveri.getColumnValue(c, r) ;
        } catch (SQLException ex) {
            Logger.getLogger(jTabel_t.class.getName()).log(Level.SEVERE, null, ex);
        }
        return str;
       
    }


    /**
     *Передаю значение переменной, количество столбцов
     * @param c
     */
    public void setColumnCount(int c){ColumnCount=c;}
    
    //
    /**
     *Передаю значение переменой о количестве строк
     * @param r
     */
    public void setRowCount(int r){RowCount=r;}
    /**
     *
     * @param c
     * @return
     */
    @Override
    public String getColumnName(int c){
   // String st =""+c+"";
    return ColumnName[c];
    
    }
    public void setRowValue(ArrayList<String> name,ArrayList<Double> x,ArrayList<Double> y){
        this.name=name;
        this.x=x;
        this.y=y;
    }
    public void setNameTab(String tab ) throws SQLException{
        
        qveri = new jSql_qveri();
        /*Предаем туда даные*/
        qveri.setTabName(tab);
        /*Возвращаем имена столбцов */
        ColumnName=qveri.getColumnName();
        /*Возвращаем количество столбцов*/
        ColumnCount=qveri.getCountStr();
        RowCount=qveri.getCountRow();
        //this.name=jConect_bd.name;
        //this.x=jConect_bd.x1;
        //this.y=jConect_bd.y1;
    }
    
}


Запрос в бд

public class jSql_qveri {
/// Обьявляем переменные
     /* Название таблицы*/
    private String TabName;
    /* Статемент БД */
    private Statement stmt_q=jConect_bd.stmt_pub;
    /*  Имена столбцов */
    private String[] ColumnName;
    /* Количество столбцов */
    private int CountStr;
    private String SQL_qveri;
    private int CountRow;
    public static String nSkv_Name;
    
     private String valueDB[][];
// Возвращаем имена столбцов
    /**
     * Возвращаt значение имен столбцов
     * @return
     */
    public String[] getColumnName(){
    return ColumnName;}
    
    /**
     * Возвращаt количество столбцов
     * @return
     */
    public int getCountStr(){
    return CountStr;}
    public int getCountRow(){
    return CountRow;
    }
    /**
     *
     * @param TabName - Это имя таблицы которое должно быть выведенно в таблицу
     * @throws SQLException
     * Процедура обработки запроса  
     */
    public void  setTabName(String TabName) throws SQLException{
     ArrayList<String> name =new ArrayList<>();
     this.TabName=TabName;
     this.nSkv_Name="0";
   // Используя глобальную переменную Номера скважины
     String nName_SKV = new String();
   if (this.nSkv_Name.isEmpty()){
        nName_SKV="0";
   }else{nName_SKV=this.nSkv_Name;}
    /*  Определяем свойства таблици и задаем необходимый запрос в бд*/    
     switch(TabName){
                case "SKV":
                   /// 1. Определяем имена столбцов
                    String[] ColumnName1 = {"Name","x","y","z","glub"}; 
                    ColumnName = ColumnName1;
     /// 2. Записываем SQL запрос
                    SQL_qveri = "Select name,x,y,z,glub from atomgeo.skv where id_mestorog=100 and name='"+nName_SKV+"'";
     /// 3. Количество столбцов
                    CountStr = 5;
                   break;

}
   /*Считываем данные из базы*/
  
     ResultSet rs=stmt_q.executeQuery(SQL_qveri); 
      // jConnect_bd;
      int r1=100000; 

     int r=0;
    valueDB=new String[r1][CountStr];
  // rs.absolute(1);
        //.first();   
    while (rs.next()){
        
        for (int i =1; i<= CountStr;i++){
          //  vulue_c[i].=add(rs.getString(rs.getString(i));
          name=null;
            int v=rs.getRow();
           valueDB[r][i-1]=rs.getString(i);
            //name.add(rs.getString(i));
           // col.add(rs.getDouble(i));
            
        } r=r+1;
      //  
    }
      // присваеваем значение количеств столбцов
       CountRow=r;
       // Закрываем запрос
     //  stmt_q.close();
}
    /**
     * Возвращаем данные о
     * @param c
     * @param r
     * @return
     * @throws SQLException
     */
    public Object getColumnValue(int c,int r) throws SQLException {
        

                return valueDB[r][c];
        }

}


Main

      public static void main(String[] args) throws SQLException {//
   //private class jTree extends CreateTree{};
        // TODO code application logic here
    
/*   

        // Создаем таблицу
        */jTabel_t jTab_Skv =new jTabel_t();
        final jTabel_t jTab_Gklit =new jTabel_t();
        jConect_bd.result();
        jTab_Skv.setNameTab("SKV");
        jTab_Skv1=jTab_Skv;
        jTab_Gklit.setNameTab("GKLIT");
        // Создаем Древо скважин
        ///1. Создаем класс дерего аналичный CreateTree
        final CreateTree jTree = new CreateTree();
        ///2. Создаем модель данных
        final TreeNode mesNode = jTree.createNodes();
        ///////////////////////////////////////
        // Создаем новую форму
        final jForm_skv jfrom_main = new jForm_skv();

        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run(){
                     

                try {
                    // Формируем дерево
                   //jTree_M.setModel(new javax.swing.tree.DefaultTreeModel(treeNode1));
                    jfrom_main.jTree_M.setModel(new javax.swing.tree.DefaultTreeModel(jTree.createNodes()));
                } catch (SQLException ex) {
                    Logger.getLogger(JAV_BD.class.getName()).log(Level.SEVERE, null, ex);
                }
                // Передаем таблице модель
                jfrom_main.jTable1.setModel(jTab_Skv1);
                jfrom_main.jTable2.setModel(jTab_Gklit);
                
                jfrom_main.setVisible(true);
           }
           });
        }


Обработка события выбора объекта

    private void jTree_MMousePressed(java.awt.event.MouseEvent evt) {
        // TODO add your handling code here:
        // Значение обьекта
        String str=this.jTree_M.getSelectionModel().getSelectionPath().getLastPathComponent().toString();
        jSql_qveri.nSkv_Name=str;
        //JAV_BD.main(args)
        this.jTable1.repaint();
        this.jTable1.revalidate();
        this.jTable2.repaint();
        this.jTable2.revalidate();
    }

Статьи читал много, но что то не въехал
КАк вариант пытаюсь в маин добавить
обработчик события выбора объекта - но как пок незнаю
и что бы в нем был следующий код

public void actionPerformed(ActionEvent e) {
               table1.setModel("SKV");
               table1.repaint;}


Comments (4)
ava
Rat | 19.03.2013, 08:42 #
Модель и таблица работают замечательно и очень гибко,
по идее я их так специально собрал что бы потом в пять минут маштабировать под любые задачи и цели.

Помогите с обработкой
сейчас добавил в маин

public static jForm_skv jfrom_main;


и обработку выбора значения из дерева исравил на

    private void jTree_MMousePressed(java.awt.event.MouseEvent evt) {
        // TODO add your handling code here:
        // Значение обьекта
        String str=this.jTree_M.getSelectionModel().getSelectionPath().getLastPathComponent().toString();
        jSql_qveri.nSkv_Name=str;
        
        jTabel_t jTab_Skv =new jTabel_t();
        try {
            jTab_Skv.setNameTab("SKV");
        } catch (SQLException ex) {
            Logger.getLogger(jForm_skv.class.getName()).log(Level.SEVERE, null, ex);
        }
       
        JAV_BD.jfrom_main.jTable1.setModel(jTab_Skv);
        JAV_BD.jfrom_main.jTable1.repaint();
        JAV_BD.jfrom_main.jTable1.updateUI();

    }

при пошаговой компиляции вроде все идет правильно и данные в модели обновляются, но отображение таблици не меняется 
ava
Rat | 19.03.2013, 11:46 #
есть идее почему не обновляется jTable  хотя модель новые данные получила 
ava
Rat | 19.03.2013, 14:16 #
 smile  smile  smile 
ГУРУ, ГУРУ , ГУРУ ,  Выходи и помоги 
ava
Rat | 20.03.2013, 04:50 #
Вопрос снимается ошибка в коде


        String str=this.jTree_M.getSelectionModel().getSelectionPath().getLastPathComponent().toString();
        jSql_qveri.nSkv_Name=str; // ошибка



переменная передается классу запроса, а нужно передать это значение
глобальной переменой желательно класса маин(а может я и ошибаюсь может стоит завести спец класс хронящий все глобальные переменные)
а у же её читать и использовать в запросе
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  Rat
advanced
Submit