JTabbedPane 跟踪上一个选项卡选择

JTabbedPane track previous tab selection

我有一个 class 扩展了 BasicTabbedPaneUI 并覆盖了一些绘制组件。

我希望能够将 addMouseListener 添加到 class 我用它来检查用户何时选择选项卡、当前选项卡索引和上一个选项卡索引。

注意: 用户可以通过键盘导航到选项卡,而不仅仅是单击选项卡,我希望能够确保之前的索引跟踪这一点。因此,在下面的示例中,无论用户是通过键盘还是鼠标导航到它,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 = ?????
        }
    });

非常感谢!!!!

我会使用更改侦听器而不是鼠标侦听器(在两种情况下都会调用它:用于鼠标和按键事件触发的选项卡更改)。如果您无法确定之前选择的选项卡,您可以使用以下方法:将当前选择的选项卡索引保存为选项卡式窗格的客户端 属性。

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
  }
});