タブペイン  (JTabbedPane の利用)

タブペイン(JTabbedPane)を使うと、それぞれのタブ領域ないにさまざまコンポーネットを配置し、 それをタブで切り替える操作が可能になります。

詳細は次のリンクで調べましょう。

以下は、タブ領域に、リスト用パネルエディタ用パネルを配置した例です。

package test;

import java.awt.*;//BorderLayoutなどのパッケージ用
import java.awt.event.*;//MouseListenerなどのパッケージ用
import javax.swing.*;//JPanelなどのパッケージ用

class MainPanel extends JPanel implements ActionListener
{
	JButton btnAdd = new JButton("追加");//ボタン生成
	JTabbedPane tabbedPane = new JTabbedPane(SwingConstants.TOP);//タブペイン

	class EditPanel extends JPanel {//---内部クラス エディタ用パネル---
		JTextArea text = new JTextArea("hello\n\n\n\nテキスト編集エリアです");//テキストエリア
		JScrollPane pane = new JScrollPane(text);//テキストエリアを入れたJScrollPane
		EditPanel()	{//コンストラクタ
			this.setLayout(new BorderLayout());//レイアウト変更
			this.add(this.pane);
		}
	}//---ここまで 内部パネル------------------------------------

	class ListPanel extends JPanel{//---内部クラス リスト用パネル---
		JList list = new JList( new String [] { "項目 A","項目 B","項目 C","項目 D","項目 E", });
		JScrollPane pane = new JScrollPane(list);//リストを入れたJScrollPane
		ListPanel()
		{//コンストラクタ
			this.setLayout(new BorderLayout());//レイアウト変更
			this.add(this.pane);
		}
	}//---ここまで 内部パネル------------------------------------
	
	public MainPanel(){//コンストラクタ
		this.setLayout(new BorderLayout());//レイアウト変更
		this.add(this.btnAdd, BorderLayout.NORTH);//ツールバーを上部に配置
		this.add(tabbedPane, BorderLayout.CENTER);//中央にテキストエリアを入れたJScrollPaneを配置

		this.tabbedPane.add(new ListPanel(), "List1");//タブ追加
		this.tabbedPane.add(new EditPanel(), "Edit2");//タブ追加
		
		this.btnAdd.addActionListener(this);
	}
	public void actionPerformed(ActionEvent e)
	{
		int count = this.tabbedPane.getTabCount();//この tabbedpane のタブの数を取得
		this.tabbedPane.add(new EditPanel(), "Edit" + (count + 1));//タブ追加
		//this.validate();//コンテナのサブコンポーネントが変更されたことを反映させる
	}
}

class TestFrame extends JFrame
{ 
	MainPanel panel = new MainPanel();
	public TestFrame()
	{//コンストラクタ
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.getContentPane().add(panel, BorderLayout.CENTER);
		this.setSize(360, 240);
		this.setVisible(true);
	}
}

public class TesTJTabbedPane extends JApplet
{//アプレット時
	MainPanel panel;
	public void init(){//ダウンロード直後で実行(コンストラクタの後)
		this.getContentPane().add(panel = new MainPanel());
	}
	public static void main(String[] args)
	{//ローカル起動時
		new TestFrame();
	}
	public void newTestFrame()
	{
		new TestFrame();
	}
}

上記において、 選択中(前面)のタブがEditPanelの場合に その中のEditPanelをeditPanelする場合は、 次のように行うことができます。
EditPanel editPanel=(EditPanel)this.tabbedPane.getSelectedComponent();
また、スクロールペインのscrollpaneから、内部の JTextAreaを textに管理させる場合は次のようにできます。
JViewport view = scrollpane.getViewport();
JTextArea text = (JTextArea)view.getView();