我使用JDesktopPane和几个JButton创建了一个简单的用户界面。该程序的工作原理是,当单击一个按钮时,JInternalFrame会加载并禁用该按钮以防止创建内部框架的副本。 JInternalFrame上的Cancel按钮关闭框架,并再次启用JButton。我的代码如下:
adminAddUser addNew = new adminAddUser();
private javax.swing.JButton newUserButton;
private void newUserButtonActionPerformed(java.awt.event.ActionEvent evt)
{
AdminPane.add(addNew);
addNew.setVisible(true);
newUserButton.setEnabled(false);
}
adminAddUser类上的“取消”按钮的动作侦听器。 dispose()方法用于关闭JInternalFrame。
private void cancelActionPerformed(java.awt.event.ActionEvent evt) {
int option;
option = JOptionPane.showConfirmDialog(rootPane, "Cancel?", "", JOptionPane.YES_NO_OPTION);
switch(option)
{
case (JOptionPane.YES_OPTION):
dispose();
break;
case (JOptionPane.NO_OPTION):
break;
default:
break;
}
}
最后,我的处理代码在内部框架关闭时重新启用JButton。
private void AdminPaneComponentRemoved(java.awt.event.ContainerEvent evt) {
if(evt.getChild() == addNew)
{
newUserButton.setEnabled(true);
}
}
单击JInternalFrame上的默认关闭按钮时按钮重新启用,但是取消按钮工作一次,并且在第二次尝试使用它时,JInternalFrame关闭,但JButton不会重新启用。我该如何重新启用它?
我非常感谢任何帮助,因为我是Java的GUI编码新手。
答案 0 :(得分:1)
这是一个可能的解决方案。
创建一个interface
(我只这样做,因为没有公开主JFrame
)。让JFrame
表单类实现它。它只有一个方法,getNewUserButtont();
public interface GetButtonInterface {
JButton getUserButton();
}
public NewJFrame extends JFrame implements GetButtonInterface {
private JButton newUserButton;
@Override
JButton getUserButton() {
return newUserButton;
}
}
然后在你的JInternaFrame
课程中,它应该在构造函数中使用GetButtonInterface
arg。这样您就可以访问newUserButton
public AdminAddUser extends JInternalFrame {
private JButton newUserButton;
public AdminAddUser(GetButtonInterface gbi) {
newUserButton = gbi.getUserButton();
}
}
现在,您可以使用该按钮执行所需操作。每个新AdminAddUser
都会使用newUserButton
的相同实例。所以你可以1.使用InternalFrameListener
并覆盖internalFrameClosing()
以在窗口关闭时启用按钮。 2.使用cancelButtonActionPerrfomed
public AdminAddUser extends JInternalFrame {
private JButton newUserButton;
public AdminAddUser(GetButtonInterface gbi) {
newUserButton = gbi.getUserButton();
addInternalFrameListener(new InternalFrameAdapter(){
@Override
public void internalFrameClosing(InternalFrameEvent e) {
newUserButton.setEnabled(true);
}
});
}
private void cancelButtonActionPerformed(ActionEvent e) {
dispose();
newUserButton.setEnabled(true);
}
}
当您实例化新的AdminAddUser
使用传递NewJFrame.this
时。这是GetButtonInterface
AdminAddUser addNew = new AdminAddUser(NewJFrame.this);
答案 1 :(得分:0)
我不明白。在我看来,adminAddUser
只创建一次。在这种情况下,您不应该使用dispose
,因为该对象将被销毁并且无法重复使用。