Как я могу использовать StringTokenizer с моим JTable - PullRequest
1 голос
/ 18 марта 2012

У меня есть jTable, и я хочу отобразить в нем результат команды, я использовал объект класса StringTokenizer, чтобы отделить результат команды cmd и отобразить его в таблице jTable1, моя проблема заключается в том, когда я использую system.out.println (st.nextToken ()) работает правильно, но когда я использую data [0] [i] для отображения результата в таблице, он отображается, когда я компилирую последний результат команды во всех строках таблицы это мой код:

 public Object[][] data;
        public String  title[] = {"t1","t2","t3","t4","t5"};
       private void init_tab() {

            data = new Object[5][5];
                 for(int i=0;i<5;i++){
           try{ 
            String      cmd = "the command "                        
            ..... //command cmd traitment
          }
I
            String response = build.toString();  
             StringTokenizer st = new StringTokenizer(response,":"); 
               while (st.hasMoreTokens()) { 

                   //System.out.println(st.nextToken()) ; 


                   data[i][0]= st.nextToken();


           }
            }catch(Exception e){
        e.printStackTrace();}  

           jTable1= new JTable(data, title);
            jScrollPane1.setViewportView(jTable1);
                     }

             }

может кто-нибудь помочь мне, я знаю проблему в данных [i] [0], но как я могу решить эту проблему, и спасибо

Ответы [ 3 ]

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

Причина, по которой отображается последний результат команды, заключается в том, что вы ее так закодировали. Пожалуйста, взгляните на следующую часть программы

      String response = build.toString();  
         StringTokenizer st = new StringTokenizer(response,":"); 
           while (st.hasMoreTokens()) { 
               //System.out.println(st.nextToken()) ; 
               data[i][0]= st.nextToken();
       }

Вы перебираете все строковые токены, разделенные символом ":", и добавляете его в те же данные о местоположении [i] [0]. Когда вы добавляете его в тот же индекс в массиве данных (строк), он будет перебирать все токены и каждый раз заменять добавленный ранее токен. Это будет происходить до тех пор, пока StringTokenizer будет иметь больше токенов и выйдет из цикла выше после добавления последнего токена. Пожалуйста, исправьте это следующим образом, если вы хотите отобразить 5 токенов в 5 разных столбцах,

         String response = build.toString();  
         StringTokenizer st = new StringTokenizer(response,":"); 
         int j = 0;
          while (st.hasMoreTokens()) { 
               //System.out.println(st.nextToken()) ; 
               data[i][j]= st.nextToken();
               j++;
           }
1 голос
/ 18 марта 2012

Для практических целей использование StringTokenizer считается устаревшим . Это только для обратной совместимости, и в настоящее время предпочтительным способом достижения того же результата является использование метода split() в классе String, например:

String response = build.toString();  
String[] st = response.split(":");
for (int j = 0; j < st.length; j++) {
    data[i][j] = st[j];
}
0 голосов
/ 18 марта 2012

Вас также может заинтересовать использование класса Splitter из библиотеки Google Guava, например Iterable tokens = Splitter.on (":") .split ();for (String token: tokens) {// сделать что-то} Он неизменен и имеет хороший свободный API.

...