2011-07-29 16 views
2

タブが表示されている場合にのみ更新するjtabbedペイン内にパネルがあります。私はisShowing()、isDisplayable()、isVisible()を試してみましたが、コンポーネントが表示可能か表示可能か、または可視かどうかをチェックするので動作しないようです。開いているタブがJavaのアクティブなタブであるかどうかを確認するにはどうすればよいですか?

JTabbedPane内のJPanelのコンテキストから、JPanelのタブがアクティブなタブであるかどうかを確認するにはどうすればよいですか?

+0

「JTabbedPaneの内部のJPanelのコンテキストから」とは、どのような意味ですか? JTabbedPaneのモデル自体は、選択したタブの変更の通知を受け取るものです。あなたは望む方法でこれをJPanelにブロードキャストできます。あなたはセットアップと問題を示す[sscce](http://sscce.org)を投稿したいかもしれません。 –

+0

JPanelは、ChangeListenerとobserver/observableパターンを使用してJTabbedPaneのモデルをリッスンすることができます。これにより、JPanelsには発生時の情報が提供されます。 –

答えて

4

JTabbedPaneのモデルを取得し、ChangeListenerを追加することができます。たとえば

import java.awt.Dimension; 
import javax.swing.*; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

public class TabbedListener { 
    private static void createAndShowUI() { 
     final JTabbedPane tabbedPane = new JTabbedPane(); 
     for (int i = 0; i < 5; i++) { 
     tabbedPane.add("Tab " + i, new JLabel("Label " + i, SwingConstants.CENTER)); 
     } 

     tabbedPane.getModel().addChangeListener(new ChangeListener() { 
     @Override 
     public void stateChanged(ChangeEvent e) { 
      JLabel label = (JLabel) tabbedPane.getSelectedComponent(); 
      System.out.println(label.getText()); 
     } 
     }); 

     tabbedPane.setPreferredSize(new Dimension(500, 300)); 

     JFrame frame = new JFrame("TabbedListener"); 
     frame.getContentPane().add(tabbedPane); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowUI(); 
     } 
     }); 
    } 
} 
+2

タブ付きペインで直接 'addChangeListener()'を呼び出すことができます。モデルを取得してそこに追加する必要はありません。 ChangeListenerが何をすべきかについては、タブに関連付けられたJPanelを '有効にする 'ことができます。次に、JPanelを有効または無効にした場合の動作が異なるようにJPanelを設定します。 – AngerClown

+0

@Anger:素晴らしい提案、ありがとう! –

関連する問題