2012-07-05 2 views
3

Как сделать добавленный JPanel видимым внутри родителя JPanel?Сделать добавленный JPanel видимым внутри родителя JPanel

Я использую Netbeans для проектирования моего пользовательского интерфейса.

У меня есть MainFrame.java, который содержит две панели; а именно headerPanel и bodyPanel.

В headerPanel Я положил три кнопки, пусть будет button1, button2 и button3.

Также я создал три отдельные файлы, простирающиеся JPanel, назовите его panel1, panel2 и panel3.

Затем я добавил все свои три панели внутри bodypanel в MainFrame.java в конструкторе.

bodyPanel.add(panel1); 
bodyPanel.add(panel2); 
bodyPanel.add(panel3); 

Я хочу, чтобы по нажатию соответствующих кнопок только соответствующие панели должны появиться в bodypanel в мэйнфреймах, то есть, если я нажму button1 то panel1 должен отображаться.

Я уже пробовал следующий код в button1 мыши метод прослушивателя:

bodyPanel.validate(); 
bodyPanel.getComponent(0).setVisible(true); 

Но panel1 не появляется. Я сделал это, потому что добавленные компоненты в панели выделены индексом. Поэтому сначала я попытался получить компоненты, а затем сделать их видимыми. Это не работает.

ответ

3

ваше требование поистине полный заполнены CARD РАСКЛ see this example link

and below example Link

enter image description here

совершенный код для проблемной случае

package panels.examples; 

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.Color; 
import java.awt.Container; 
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; 

public class MainFrame extends JFrame implements ActionListener 
{ 
JPanel headerPanel; 
JPanel bodyPanel; 
JPanel panel1,panel2,panel3; 
JButton button1,button2,button3; 
Container con; 
CardLayout clayout; 
public MainFrame() 
{ 
    //con=getContentPane(); 
    clayout=new CardLayout(); 
    headerPanel=new JPanel(); 
    bodyPanel=new JPanel(clayout); 

    button1=new JButton("button1"); 
    button2=new JButton("button2"); 
    button3=new JButton("button3"); 

    //add three buttons to headerPanel 
    headerPanel.add(button1); 
    headerPanel.add(button2); 
    headerPanel.add(button3); 

    button1.addActionListener(this); 
    button2.addActionListener(this); 
    button3.addActionListener(this); 

    panel1=new JPanel(); 
    panel1.add(new JLabel("Panel1")); 
    panel1.setBackground(Color.pink); 
    panel2=new JPanel(); 
    panel2.add(new JLabel("Panel2")); 
    panel2.setBackground(Color.gray); 
    panel3=new JPanel(); 
    panel3.add(new JLabel("Panel3")); 

    //add above three panels to bodyPanel 
    bodyPanel.add(panel1,"one");  
    bodyPanel.add(panel2,"two");  
    bodyPanel.add(panel3,"three"); 


    setLayout(new BorderLayout()); 
    setSize(600,450); 
    add(headerPanel,BorderLayout.NORTH); 
    add(bodyPanel,BorderLayout.CENTER); 
// headerPanel.setBounds(0,0,600,100); 
    bodyPanel.setBounds(0,100, 600, 500); 
    setVisible(true); 

} 

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

@Override 
public void actionPerformed(ActionEvent e) { 

    if(e.getSource()==button1) 
    { 
     clayout.show(bodyPanel, "one"); 
    } 
    else if(e.getSource()==button2) 
    { 
     clayout.show(bodyPanel, "two"); 
    } 
    else if(e.getSource()==button3) 
    { 
     clayout.show(bodyPanel, "three"); 
    } 

} 

} 

из положить

out put

2

Используйте CardLayout. Ниже приведен класс помощников, который я написал. Надеюсь, поможет.

import java.awt.CardLayout; 

import javax.swing.JPanel; 

/** 
* 
* @author Dchan(Dulitha Wijewantha) 
* 
*   This class is used to switch Cards in a CardLayout 
* 
* @version $Revision: 1.0 $ 
*/ 
public class CardLayoutHelper { 

    private JPanel panel; 
    private CardLayout layout; 

    /** 
    * 

    * @param panel JPanel 
    */ 
    public CardLayoutHelper(JPanel panel) { 
     this.panel = panel; 
     this.layout = (CardLayout) this.panel.getLayout(); 
    } 
    public CardLayoutHelper(JPanel panel, JPanel... panels){ 
     this(panel); 
     for (int i = 0; i < panels.length; i++) { 
      JPanel jPanel = panels[i]; 
      panel.add(jPanel.getName(), jPanel); 
     } 
    } 

    /** 
    * 
    * @param currentPanel 
    *   - The panel that will be switched into the view 
    */ 
    public void switchPanel(JPanel currentPanel) { 
     panel.removeAll(); 
     panel.add(currentPanel, currentPanel.getName()); 
     layout.show(panel, currentPanel.getName()); 
     panel.revalidate(); 
     panel.repaint(); 
    } 
    public void switchPanel(String name){ 
     layout.show(panel, name); 
     panel.revalidate(); 
     panel.repaint(); 
    } 
} 
+0

Что?!? Метод 'switchPanel', похоже, идет против подхода' CardLayout'! –

+0

Я удаляю панель, потому что использовал ее в общем. Но если вы хотите, вы можете улучшить метод для добавления панелей и переключения соответственно. – Chan

+0

сожалею об этом, но после написания комментария я отредактировал хелпер XD – Chan

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