当点击JTabbedPane
中存在的某个面板时,我需要在开始时执行一些操作。比方说,我需要检查用户名和密码。只有当这些匹配时,才需要执行特定的面板操作。你能建议任何方法吗?
答案 0 :(得分:8)
我不确定我完全理解你的问题,但我会做类似的事情:
例如:
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 EventQueue
,super.setSelectedIndex(int)
的来电已在AWT EventQueue
上完成。