2012-02-22 19 views
0

実行時にJFrameの内容を変更する方法を知りたい。新しいJPanelを追加し、古いJPanelを削除する。実行時にJFrameのJPanelを変更する方法

+1

'JFrame.add()'、 'JFrame.remove()'の何が問題なのですが? – DNA

+1

[JFrameの内部でJPanelを変更するにはどうすればよいですか?](http://stackoverflow.com/questions/218155/how-do-i-change-jpanel-inside-a-jframe-on-the -fly) – DNA

+0

可能な複製http://stackoverflow.com/questions/9371460/how-can-i-stack-overlay-jpanels-in-java/9377623#9377623? – Juvanis

答えて

2

あなたは、フレーム内のアクティブなパネルを変更するCardLayoutの使用を検討することができます。実行時のJPanelを変更する

0

ここにコードです:

package stack; 

import java.awt.BorderLayout; 
import java.awt.Dimension; 
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 RemoveAndAddPanel implements ActionListener{ 
    JFrame frame; 
    JPanel firstPanel; 
    JPanel secondPanel; 
    JPanel controlPanel; 
    JButton nextButton; 
    JPanel panelContainer; 
    JButton preButton; 
    JPanel contentPane; 

    public RemoveAndAddPanel() { 
     JFrame.setDefaultLookAndFeelDecorated(true); 
     frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     firstPanel = new JPanel(); 
     firstPanel.add(new JLabel("FirstPanel")); 
     firstPanel.setPreferredSize(new Dimension(100,100)); 

     secondPanel = new JPanel(); 
     secondPanel.add(new JLabel("Second panel")); 
     secondPanel.setPreferredSize(new Dimension(100,100)); 

     panelContainer = new JPanel(); 
     contentPane = new JPanel(new BorderLayout()); 

     nextButton = new JButton("Next panel"); 
     preButton = new JButton("PreButton"); 
     controlPanel = new JPanel(); 

     nextButton.addActionListener(this); 
     preButton.addActionListener(this); 
     preButton.setEnabled(false); 

     controlPanel.add(preButton); 
     controlPanel.add(nextButton); 

     panelContainer.setLayout(new BorderLayout()); 
     panelContainer.add(firstPanel,BorderLayout.CENTER); 
     contentPane.add(controlPanel, BorderLayout.SOUTH); 
     contentPane.add(panelContainer,BorderLayout.CENTER); 

     frame.setContentPane(contentPane); 

     frame.setVisible(true); 
     frame.setSize(300,100); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if(e.getSource() == nextButton) { 
      panelContainer.removeAll(); 
      panelContainer.setSize(0,0); 
      panelContainer.setSize(secondPanel.getSize()); 
      panelContainer.add(secondPanel,BorderLayout.CENTER); 
      panelContainer.revalidate(); 


      nextButton.setEnabled(false); 
      preButton.setEnabled(true); 
     } 
     if (e.getSource() == preButton) { 
      panelContainer.removeAll(); 
      panelContainer.setSize(0,0); 
      panelContainer.setSize(firstPanel.getSize()); 
      panelContainer.add(firstPanel,BorderLayout.CENTER); 
      nextButton.setEnabled(true); 
      preButton.setEnabled(false); 
     } 
    } 
    public static void main(String args[]) { 
     new RemoveAndAddPanel(); 
    } 
} 
関連する問題