JPanelから拡張されたCPanelから拡張されたVTreePanelクラスがあります。このクラスには、左と右の2つの領域に分割されたJSplitPaneオブジェクトがあります。左側にはツリーメニュー選択オブジェクトが含まれています。右側には、JTabbedPaneオブジェクトが含まれています。VTreePanelクラスは次のようになります。
public final class VTreePanel extends CPanel
implements ActionListener
{
private JSplitPane centerSplitPane = new JSplitPane();
private JTabbedPane tabbedPane;
...
// GET method for the tabbedPane
public JTabbedPane getTabbedPane() {
return tabbedPane;
}
// Constructor
public VTreePanel(int WindowNo, boolean hasBar, boolean editable)
{
...
tabbedPane = new JTabbedPane();
centerSplitPane.add(treePart, JSplitPane.LEFT);
centerSplitPane.add(tabbedPane, JSplitPane.RIGHT); // Look at this
...
}
}
コンストラクターで、ツリー選択(treePart)とJTabbedPaneオブジェクト(tabbedPane)をJSplitPaneオブジェクト(centerSplitPane)に追加しました。tabbedPaneにはまだタブを追加していません。以下のスクリーンショットを見てください。
http://i45.tinypic.com/2v3j0nl.jpg
次に、ユーザーがメニューの1つをクリックしたときに、タブを追加するにはどうすればよいですか?
ユーザーがメニューをクリックしたときにpropertyChangeメソッドを起動するPropertyChangeListenerを実装したAMenuクラスがあります。
public final class AMenu extends CFrame
implements ActionListener, PropertyChangeListener, ChangeListener
{
private VTreePanel treePanel = null; // this is the VTreePanel object
...
public void propertyChange(PropertyChangeEvent e)
{
...
// Here I pass the VTreePanel object as parameter to AMenuStartItem thread object
(new AMenuStartItem(cmd, true, sta, this, treePanel)).start();
}
}
VTreePanelオブジェクト(treePanel)があり、VTreePanelオブジェクトをパラメーターとしてAMenuStartItemスレッドに渡すことがわかります。AMenuStartItemには、JTabbedPaneにTabを追加するロジックが含まれています(JTabbedPaneオブジェクト(tabbedPane)はVTreePanelにあることに注意してください)。
AMenuStartItemスレッドクラスは次のとおりです。
public class AMenuStartItem extends Thread implements ActionListener
{
private VTreePanel m_vtreePanel;
public AMenuStartItem (int ID, boolean isMenu, String name, AMenu menu, VTreePanel vtreepanel)
{
...
m_vtreePanel = vtreepanel; // save the VTreePanel object
}
// The thread method that executed when thread is started
public void run()
{
...
startWindow(0, cmd);
...
}
private void startWindow(int AD_Workbench_ID, int AD_Window_ID)
{
...
// Here I perform adding new tab
m_vtreePanel.getTabbedPane().addTab(frame.getTitle(), frame.getAPanel());
...
}
}
そのため、getTabbedPane()はJTabbedPaneオブジェクトを返し、addTab()メソッドが実行されましたが、タブはまったく表示されませんでした。
誰かがこの問題を解決する方法を知っていますか?