2011-04-22 11 views
2

このコードでは、どのタブが選択されているのかを知ることができますが、タブの中に何があるのか​​を調べる必要があります。階層をどのように扱うのですか?JavaのGUI階層でコンポーネントを見つける

EditPane.addChangeListener(new ChangeListener() { 
// This method is called whenever the selected tab changes 
public void stateChanged(ChangeEvent evt) { 
    JTabbedPane pane = (JTabbedPane)evt.getSource(); 

    // Gets current tab 
    int sel = pane.getSelectedIndex(); 
} 
}); 

タブ内部にあるコンポーネントがJScrollPaneあります。

答えて

4

ペインのインデックスは必要ありません。下に選択したコンポーネントが必要です。 getSelectedComponent()を使用します。

JTabbedPane pane = (JTabbedPane)evt.getSource(); 
JComponent myComponent = pane.getSelectedComponent(); 

元の目標を明確にするために、JScrollPaneにあるクライアントオブジェクトを操作する必要があります。いくつかのオブジェクトが欠落しています。 JScrollPaneで、getViewport()。getViewportView()をScrollPaneから呼び出す必要があります。 (出典:http://download.oracle.com/javase/tutorial/uiswing/components/scrollpane.html

+0

の階層のための非常に良い教訓ですか?逆のgetParent()のように – Tim

+1

@Dasdasdあなたが探しているものなら、 'Container'クラスに' Component [] getComponents() 'メソッドがあります。 – Howard

+0

私はすでにそれをチェックアウトしましたが、ScrollPane内にあるエディタではなく、ViewPortsとScrollBarsだけを返します。 – Tim

1

Dasdasd

I already checked it out but it only returns ViewPorts and ScrollBars 

@あなたはそれが可能だ、ViewPortJPanelを見つけることができませんようになるまで正しい、(probalbyそこにあなたはJPanelのを入れて)はい、あなたは、もう一度手順を繰り返ししなければなりませんJComponentのに別の方法(複数可)を取得しますが、これはGetChildrenメソッド()メソッドはありませんJComponents

Component[] components = xxx.getComponents(); 
    for (int i = 0, l = components.length; i < l; i++) { 
    if (components[i] instanceof JScrollPane) { 
     JScrollPane scr = (JScrollPane) components[i]; 
      Component[] components1 = scr.getComponents();n 
関連する問題