JTabbedPane跟踪上一个选项卡

时间:2015-04-18 15:28:51

标签: java swing jtabbedpane

我有一个扩展BasicTabbedPaneUI的类,并执行一些绘制组件覆盖。

我希望能够将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 = ?????
        }
    });

非常感谢!!!!

1 个答案:

答案 0 :(得分:3)

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

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