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