JTabbedPane:在显示所选选项卡之前执行的操作

时间:2009-06-30 10:42:50

标签: java swing jtabbedpane

当点击JTabbedPane中存在的某个面板时,我需要在开始时执行一些操作。比方说,我需要检查用户名和密码。只有当这些匹配时,才需要执行特定的面板操作。你能建议任何方法吗?

2 个答案:

答案 0 :(得分:8)

我不确定我完全理解你的问题,但我会做类似的事情:

  • 将一个ChangeListener添加到JTabbedPane以侦听第一个标签点击。
  • 当发生ChangeEvent时,使用SwingWorker在后台线程上执行登录。
  • 如果登录成功,请在事件派发线程上执行所需的UI操作。

例如:

    tabbedPane.addChangeListener(new ChangeListener() {
    private boolean init;

    public void stateChanged(ChangeEvent e) {
        if (!init) {                                        
            init = true;

            new SwingWorker<Boolean, Void>() {
                @Override
                protected void done() {
                    try {
                        boolean loggedIn = get();

                        if (loggedIn) {
                            // Success so perform tab operations.
                        }
                    } catch (InterruptedException e1) {
                        e1.printStackTrace(); // Handle this.
                    } catch (ExecutionException e1) {
                        e1.printStackTrace(); // Handle this.
                    }
                }

                protected Boolean doInBackground() throws Exception {
                    // Perform login on background thread.  Return true if successful.
                    return true;
                }
            }.execute();
        }
        }
    });

答案 1 :(得分:3)

更改选项卡的操作由UI类中的鼠标侦听器触发。它会检查点击的坐标是否有标签,如果是,则是否启用了标签。如果符合该条件,则会在setSelectedIndex(int)上致电JTabbedPane。为了拦截选项卡更改,您可以执行的操作是覆盖setSelectedIndex(int)以触发权限检查。验证权限后,您可以拨打super.setSelectedIndex(int)。这应该做你想要的。

请注意,如果权限检查是一个长时间运行的调用(即对数据库或服务器的调用),您应该使用类似SwingWorker之类的内容来中断处理,以便完成权限检查关闭AWT EventQueuesuper.setSelectedIndex(int)的来电已在AWT EventQueue上完成。