在Java中,如何在切换到新JTab之前捕获事件?

itr*_*tro 2 java swing focus jtabbedpane

如何在新标签切换到之前捕获事件?在每个标签中我都有JTable,我用它的数据(删除,添加,更新)做了一些事情.我想在切换到新选项卡之前进行数据验证(保存或取消更改).我使用Java 1.5.

class ViewPanel extends JPanel 
  {

    private void Components() {
    setPreferredSize(new Dimension(700, 400));

    tabbedPane.addTab("DC", ANSFER.getIcon(),new DcTabPanel(this), "DC");
    tabbedPane.addTab("PC", THUMB4.getIcon(),new PcTabPanel(this), "PC");

    tabbedPane.addChangeListener(this);
    add(tabbedPane);
     }


     public void stateChanged(ChangeEvent e) {

     }

   }
Run Code Online (Sandbox Code Playgroud)

Rod*_*eas 5

JTabbedPaneSingleSelectionModel支持.如果扩展DefaultSingleSelectionModel,则可以覆盖setSelectedIndex方法并实现逻辑.

// in new selection model:
public void setSelectedIndex(int index) {
    // do pre-switch things here
    super.setSelectedIndex(index);
}

// in ViewPanel, on tabbedPane create:
tabbedPane.setModel(newSelectionModel);
Run Code Online (Sandbox Code Playgroud)

你不能简单地使用ChangeListener的原因是因为它会在变化时触发.通过扩展选择模型,可以选项卡更改之前触发.