タブペイン(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();