2015-05-17 5 views
2

я получил в итерации цикла, как:TabbedPane итерация цикл

Tab 1 
Tab 2 

На начало кода у меня есть панель, tabbedpane и ScrollPane:

JPanel panel = new JPanel(); 
JTabbedPane tabbedPane = new JTabbedPane(); 
JScrollPane scrollPanel = new JScrollPane(); 

Затем получают путем итерации с помощью Event JList и получить Tab 1 и Tab 2, но не может добавить две вкладки. Так вот итерация и получить Tab 1 и Tab 2 в tab_name переменной:

String tab_name = ap_data_array[2]; // Tab 1, Tab 2 

tabbedPane.addTab(tab_name, panel); // Here add only once tab Tab 1 
this.jPanel1.add(tabbedPane, BorderLayout.CENTER); 

scrollPanel.setViewportView(new JLabel(ap_data_array[2])); 
tabbedPane.setBounds(0, 0, 530, 500); 

this.jPanel1.setSize(530,500); 

System.out.println(tab_name); // Tab 1 then Tab 2 

В результате только делают 1 таб, Tab 1.

Вот полный код:

String lines[] = loaded_data.split("\\r?\\n"); 
for (String item : lines) 
{ 
String pattern = "AP.*"; 
Pattern r = Pattern.compile(pattern); 
Matcher m = r.matcher(item); 

// Added 
JPanel panel = new JPanel(); 
JTabbedPane tabbedPane = new JTabbedPane(); 
JScrollPane scrollPanel = new JScrollPane(); 

if (m.find()) 
{ 
    String ap_data = m.group(0); 
    String[] ap_data_array = ap_data.split("\\|", -1); 



    if (ap_data_array[0].equals("AP")) 
    { 
     JList source = (JList)evt.getSource(); 
     String selected = source.getSelectedValue().toString(); 

     // type selected 
     if (ap_data_array[1].equals(selected)) 
     { 
      // tabs name 
      //ap_data_array[2] // "Tab 1" "Tab 2" 

      String tab_name = ap_data_array[2]; 

      tabbedPane.addTab(tab_name, panel); 
      this.jPanel1.add(tabbedPane, BorderLayout.CENTER); 

      scrollPanel.setViewportView(new JLabel(ap_data_array[2])); 
      tabbedPane.setBounds(0, 0, 530, 500); 



      this.jPanel1.setSize(530,500); 

      System.out.println(tab_name); // "Tab 1" "Tab 2" 
    } 
    } 
} 
} 

РЕШЕНИЕ:

private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {          

    if (evt.getValueIsAdjusting()) 
    { 
     JTabbedPane tabbedPane = new JTabbedPane(); 

     this.jPanel1.removeAll(); // REMOVE ALL DATA IN PANEL TO RELOAD NEW TAB PANEL IN LOOP 

     String lines[] = loaded_data.split("\\r?\\n"); 
     for (String item : lines) 
     { 
      String pattern = "AP.*"; 
      Pattern r = Pattern.compile(pattern); 
      Matcher m = r.matcher(item); 

      JPanel panel = new JPanel(); 

      if (m.find()) 
      { 
       String ap_data = m.group(0); 
       String[] ap_data_array = ap_data.split("\\|", -1); 



       if (ap_data_array[0].equals("AP")) 
       { 
        JList source = (JList)evt.getSource(); 
        String selected = source.getSelectedValue().toString(); 

        // type selected 
        if (ap_data_array[1].equals(selected)) 
        { 
         String tab_name = ap_data_array[2]; // STRING "Tab 1" and "Tab 2" loop 


         this.jPanel1.add(tabbedPane, BorderLayout.CENTER); 
         tabbedPane.add(tab_name, new JLabel(tab_name)); 

         tabbedPane.setBounds(0, 0, 530, 500); 

         this.jPanel1.setSize(530,500); 
        } 
       } 
      } 
     } 
    } 

    }    
+0

Если вы получаете только два элемента в массиве, почему вы индексируете 'ap_data_array [2]'? –

+0

Существует итерация выше, 'ap_data_array [2]' принимает только строку 'Tab 1', например. –

+0

Итак, какой ожидаемый результат вы хотите? –

ответ

2

Если я не понимаю ваш код правильно (без гарантии, так как это не minimal example program, что я могу запустить и протестировать), внутри цикла for вы создаете новый JTabbedPane с каждой итерацией, dding одной вкладки к ней, а затем добавив ее в BorderLayout-используя JPanel в позиции BorderLayout.CENTER. Таким образом, если вы повторяете дважды, вы создадите два JTabbedPanes, каждый из которых имеет только одну вкладку, а второй будет полностью закрывать первый. Если это действительно является источником ваших проблем, тогда решение легко: создайте только один JTabbedPane, сделайте это до цикла for и добавьте свои вкладки (JPanels) внутри цикла for.

Другие проблемы включают использование setBounds(...). Не делай этого.

+0

Я думаю, что это возможно ответ, я проверю его. –

+0

Нашли решение. Должно быть: 'this.jPanel1.add (tabbedPane, BorderLayout.CENTER); tabbedPane.add (имя_таблицы, новый JLabel (tab_name)); 'вместо функции addTab()'. –

 Смежные вопросы

  • Нет связанных вопросов^_^