单击a 中存在的面板之一时JTabbedPane
,我需要在开始时执行一些操作。比如说,我需要检查用户名和密码。只有当它们匹配时,才需要执行特定的面板操作。你能推荐一些方法吗?
Raji
问问题
8310 次
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 回答