5

单击a 中存在的面板之一时JTabbedPane,我需要在开始时执行一些操作。比如说,我需要检查用户名和密码。只有当它们匹配时,才需要执行特定的面板操作。你能推荐一些方法吗?

4

2 回答 2

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();
        }
        }
    });
于 2009-06-30T10:53:53.503 回答
3

更改选项卡的操作由 UI 类中的鼠标侦听器触发。它通过并检查单击的坐标处是否有选项卡,如果有,是否启用了选项卡。如果满足该条件,它将调用setSelectedIndex(int)您的JTabbedPane. 为了拦截选项卡更改,您可以做的是覆盖setSelectedIndex(int)以触发权限检查。验证权限后,您可以调用super.setSelectedIndex(int). 这应该做你想做的。

请注意,如果权限检查是一个长时间运行的调用(即对数据库或服务器的调用),您应该使用诸如SwingWorker中断您的处理之类的东西,以便完成权限检查并完成AWT EventQueue调用super.setSelectedIndex(int)AWT EventQueue

于 2009-06-30T11:29:54.117 回答