2013-11-20 3 views
0

У меня есть программное обеспечение для экзамена, есть список форм 1, формы 2 и формы 3. а рядом есть jtabbedpane с вкладом 1, термин 2, термин 3 .Как удалить содержимое JTabbedPane после действия элемента меню

String[] lists={"Form 1","Form 2","Form 3,"Form 4"};  
JList forms=new JList(lists); 
JTabbedPane tabs=new JTabbedPane(); 
//add lists to frame 
//add component to tabbedpane("term1","term 2',"term 3") 
//i created acionlistener for list value changed 

теперь, что все детали в моем JList имеют различные значения для term1,2 и 3, как я изменить содержимое панели в tabbedpane? я попробовал

tabs.removeAll(); 
tabs.add(term1); 
tabs.validate(); 

, но оно не работает

ответ

2

Я думаю, в принципе, вы хотите использовать метод JTabbedPane#add(String, Component) вместо этого, например

tabs.add("Term 1", term1); 

И только в случае, это код Я использовал для проверки своих идей с ...

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTabbedPane; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class TestTabbedPane100 { 

    public static void main(String[] args) { 
     new TestTabbedPane100(); 
    } 

    public TestTabbedPane100() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private JTabbedPane tabbedPane; 
     private int index; 

     public TestPane() { 
      setLayout(new BorderLayout()); 
      tabbedPane = new JTabbedPane(); 
      addTabs(); 

      add(tabbedPane); 

      JButton btn = new JButton("Update"); 
      add(btn, BorderLayout.SOUTH); 
      btn.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        tabbedPane.removeAll(); 
        addTabs(); 
       } 
      }); 
     } 

     protected void addTabs() { 
      for (int count = 0; count < 10; count++, index++) { 
       tabbedPane.add("Testing" + index, new JLabel("Testing" + index)); 
      } 
     } 
    } 

} 
+0

большое спасибо, я ценю – samueldervis

+0

Не беспокойтесь, надеюсь, что это помогает – MadProgrammer

2

Fo r добавление вкладок использует один из методов: addTab(...). Для удаления используйте removeTabAt(int i).

Читать учебник для JTabbedPane

Следующий пример добавления новой вкладки/удалить выбранный/удалить все. Я думаю, что это поможет вам:

public class Form extends JFrame { 

    private static JTabbedPane tabs; 
    private static int counter; 

    public static void main(String[] args) { 
     final JFrame frame = new JFrame("Game"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JButton add = new JButton("add"); 
     add.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       JLabel l = new JLabel(++counter+""); 
       tabs.addTab("New Tab "+counter, l); 
      } 
     }); 

     JButton remove = new JButton("remove"); 
     remove.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       int selectedIndex = tabs.getSelectedIndex(); 
       if(selectedIndex != -1){ 
        tabs.removeTabAt(selectedIndex); 
       } 
      } 
     }); 

     JButton removeAll = new JButton("remove all"); 
     removeAll.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       while (tabs.getTabCount() > 0){ 
        tabs.removeTabAt(0); 
       } 
      } 
     }); 

     JPanel north = new JPanel(); 
     north.add(add); 
     north.add(remove); 
     north.add(removeAll); 
     frame.getContentPane().add(north,BorderLayout.NORTH); 

     tabs = new JTabbedPane(); 
     tabs.setPreferredSize(new Dimension(200,200)); 
     frame.add(new JScrollPane(tabs),BorderLayout.CENTER); 

     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+0

+1. Примечание. [Remove (int)] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JTabbedPane.html#remove%28int%29) также удаляет вкладку. – dic19

+0

Да, я этого не заметил. ответить – alex2410

+0

Большое спасибо. Я ценю – samueldervis

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