2015-04-18 60 views
2

我有一個類擴展BasicTabbedPaneUI並做一些繪製組件覆蓋。JTabbedPane跟蹤以前的選項卡選擇

我想能夠添加一個addMouseListener到我使用它的類來檢查用戶何時選擇一個選項卡當前選項卡索引和以前的選項卡索引。

注意:用戶可以通過鍵盤導航到標籤,而不僅僅是點擊一個標籤,我希望能夠確保以前的索引跟蹤這個。因此,在下面的示例中,無論用戶是通過鍵盤還是鼠標導航,preIndex都會等於先前的索引。

有什麼想法嗎?

tabbedPane.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mousePressed(MouseEvent e) { 
      JTabbedPane tabP = (JTabbedPane) e.getSource(); 
      int currIndex = tabP.indexAtLocation(e.getX(), e.getY()); 

      int prevIndex = ????? 
     } 
    }); 

非常感謝!!!!

回答

2

我會使用更改偵聽器而不是鼠標偵聽器(它在兩種情況下均被調用:用於鼠標和鍵事件觸發的選項卡更改)。如果您無法確定先前選擇的選項卡,則可以使用以下方法:將當前選定的選項卡索引保存爲選項卡窗格的客戶端屬性。

private static final String OLD_TAB_INDEX_PROPERTY = "oldTabIdx"; 

tabbedPane.addChangeListener(new ChangeListener() { 
    public void stateChanged(ChangeEvent e) { 
    JTabbedPane tabP = (JTabbedPane) e.getSource(); 
    int currIndex = tabP.getSelectedIndex(); 

    int oldIdx = 0; 
    Object old = tabP.getClientProperty(OLD_TAB_INDEX_PROPERTY); 
    if (old instanceof Integer) { 
     oldIdx = (Integer) old; 
    } 
    tabP.putClientProperty(OLD_TAB_INDEX_PROPERTY, currIndex); 
    // now we can use old and current index 
    } 
}); 
相關問題