swing 切換面板

 

package change_panel;

import javax.swing.SwingUtilities;

import java.awt.BorderLayout;

import javax.swing.JPanel;

import javax.swing.JFrame;

import java.awt.Dimension;

import javax.swing.BorderFactory;

import java.awt.Color;

import javax.swing.JButton;

import java.awt.Rectangle;
import java.util.HashMap;
import java.util.Map;

import javax.swing.JLabel;

import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.SwingConstants;

public class ChangePanelExample2 extends JFrame {

	private static final long serialVersionUID = 1L;

	private JPanel jContentPane = null;

	private JPanel jPanel = null;

	private JButton jButton = null;

	private JLabel jLabel = null;

	private Map<Integer, JPanel> panelMap = new HashMap<Integer, JPanel>();
	
	/**
	 * 
	 * This method initializes jPanel
	 * 
	 * 
	 * 
	 * @return javax.swing.JPanel
	 * 
	 */

	private JPanel getJPanel(int num) {

		if (jPanel == null) {

			jPanel = new JPanel();

			jPanel.setLayout(new GridLayout(num, 1));

			jPanel.setPreferredSize(new Dimension(100, 0));

			jPanel.setBorder(BorderFactory.createLineBorder(Color.black, 1));

			for(int i = 0; i < num; i++){
				jPanel.add(getJButton(i), null);
			}

		}

		return jPanel;

	}

	/**
	 * 
	 * This method initializes jButton
	 * 
	 * 
	 * 
	 * @return javax.swing.JButton
	 * 
	 */

	private JButton getJButton(int i) {

			jButton = new JButton();

			jButton.setBounds(new Rectangle(5, 11, 83, 27));
			jButton.setPreferredSize(new Dimension(83, 27));

			jButton.setForeground(Color.red);

			jButton.setText("Panel " + i);

			jButton.addActionListener(new java.awt.event.ActionListener() {

				public void actionPerformed(java.awt.event.ActionEvent e) {

					jContentPane.remove(((BorderLayout) jContentPane.getLayout()).getLayoutComponent(BorderLayout.CENTER));// 刪除內容面板中間原來的組建

					jContentPane.add(getJPanel1(i), BorderLayout.CENTER);// 添加要切換的面板

					jContentPane.validate();// 重構內容面板

					jContentPane.repaint();// 重繪內容面板

					// 上面兩句缺一不可,

					// 沒有validate()刪除和添加沒有效果

					// 沒有repaint()界面繪出現混亂

				}

			});

		return jButton;

	}



	/**
	 * 
	 * This method initializes jPanel1
	 * 
	 * 
	 * 
	 * @return javax.swing.JPanel
	 * 
	 */

	private JPanel getJPanel1(int i) {
		JPanel panel = panelMap.get(i);
		if(panel == null){

			jLabel = new JLabel();

			jLabel.setBounds(new Rectangle(151, 99, 163, 113));

			jLabel.setFont(new Font("Dialog", Font.BOLD, 24));

			jLabel.setHorizontalAlignment(SwingConstants.CENTER);

			jLabel.setForeground(new Color(255, 51, 51));

			jLabel.setText("Panel "+i);

			panel = new JPanel();

			panel.setLayout(null);

			panel.add(jLabel, null);
			
			panelMap.put(i, panel);
		}

		return panel;

	}


	/**
	 * 
	 * @param args
	 * 
	 */

	public static void main(String[] args) {

		// TODO Auto-generated method stub

		SwingUtilities.invokeLater(new Runnable() {

			public void run() {

				ChangePanelExample2 thisClass = new ChangePanelExample2();

				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

				thisClass.setVisible(true);

			}

		});

	}

	/**
	 * 
	 * This is the default constructor
	 * 
	 */

	public ChangePanelExample2() {

		super();

		initialize();

	}

	/**
	 * 
	 * This method initializes this
	 * 
	 * 
	 * 
	 * @return void
	 * 
	 */

	private void initialize() {

		this.setSize(472, 410);

		this.setResizable(false);

		this.setContentPane(getJContentPane());

		this.setTitle("JPanel切換示例");

	}

	/**
	 * 
	 * This method initializes jContentPane
	 * 
	 * 
	 * 
	 * @return javax.swing.JPanel
	 * 
	 */

	private JPanel getJContentPane() {

		if (jContentPane == null) {

			jContentPane = new JPanel();

			jContentPane.setLayout(new BorderLayout());

			jContentPane.add(getJPanel1(0), BorderLayout.CENTER);//中間面板
			
			jContentPane.add(getJPanel(10), BorderLayout.WEST);//左邊面板

		}

		return jContentPane;

	}
}
相關文章
相關標籤/搜索