当前位置: 首页 > 知识库问答 >
问题:

关闭JInternalFrame后JButton未重新启用

云弘壮
2023-03-14

我用一个JDesktopPane和几个JButton做了一个简单的用户界面。该程序的工作原理是,当单击按钮时,JInternalFrame将加载并禁用该按钮,以防止创建内部框架的副本。JInternalFrame上的取消按钮关闭帧,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类上Cancel按钮的操作侦听器。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图形用户界面编码的新手。

共有2个答案

游高杰
2023-03-14

我不明白。在我看来,adminaddUser只创建一次。在这种情况下,您不应该使用disment,因为对象将被销毁,无法重用。

曾光远
2023-03-14

这里有一个可能的解决方案。

>

  • 创建一个接口(我只这样做,因为没有公开主JFrame)。让JFrame表单类实现它。它只有一个方法getNewUserButtont()

    public interface GetButtonInterface {
        JButton getUserButton();
    } 
    
    public NewJFrame extends JFrame implements GetButtonInterface {
        private JButton newUserButton;
    
        @Override
        JButton getUserButton() {
            return newUserButton;
        }
    }
    

    然后在您的JInternaFrame类中,它应该在构造函数中使用GetButtonInterfacearg。这样您就可以访问newUserButton

    public AdminAddUser extends JInternalFrame {
        private JButton newUserButton;
    
        public AdminAddUser(GetButtonInterface gbi) {
            newUserButton = gbi.getUserButton();
        }
    }
    

    现在你可以用这个按钮做你想做的事了。每个新的AdminAddUser都将使用相同的newUserButton实例。所以你可以1。使用InternalFrameListener并覆盖internalFrameClosing()在窗口关闭时启用该按钮。2.使用取消按钮actionPerrfomed

    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时,请使用passNewJFrame。这将添加到它。这是GetButtonInterface

    AdminAddUser addNew = new AdminAddUser(NewJFrame.this);
    

  •  类似资料:
    • 问题内容: 我在NetBeans中设计了两个JFrame。 当我单击“规则”按钮(即放在JFrame1上)时,它将打开第二个JFrame(但JFrame2在JFrame1的窗口上打开,这是我不想要的)。在第二个JFrame中,有一个“关闭”按钮。但是,当我单击此按钮时,我希望打开JFrame1并且它也能正常工作,但是JFrame2实际上没有关闭,并且JFrame1出现在JFrame2上方。 简而言

    • 情况:JDesktopPane中有供应商_JinternalFrame。JDesktopPane中的call SetVisible(true)有一个Supplier_按钮,用于显示供应商框架。但当我通过Dispose()关闭供应商框架时;再次单击按钮后,它将隐藏并不再显示。有两个选项可以使用setshow();和setHide()而不是setDispose()。但我想重新创建Jinternalfr

    • 这个问题似乎不是关于特定的编程问题、软件算法或主要由程序员使用的软件工具。如果你认为这个问题会在另一个Stack Exchange网站上出现,你可以留下评论来解释问题的答案。 更改crontable文件后是否必须重新启动cron?

    • 问题内容: 我可以轻松进行“作业”,但是我发现输入流的关闭存在一些问题。简单地说,我必须使用Java创建一个联系人“列表”应用程序,才能以正确的方式使用多态。所以我有一个Contact类和一个Private类(contact)。在这两个类中,都有一个Modify方法来更改变量的值。 这是不会产生问题的Contact方法 相反,这是Private中方法的替代。首先,我创建一个Private对象,然后

    • 关闭Android Studio选项卡后,我无法再次打开它。在卸载并重新安装软件之前,我无法打开Android Studio。每隔一段时间,屏幕就会变灰,我不得不重新安装。 我尝试过右键单击并选择“打开”,但它没有任何作用。 我原以为Android Studio会在点击后打开,但似乎我从来没有安装过它。它只在我关闭选项卡之前有效。 更新: 我进入我的文件,点击了一个叫做“工作室”的。它给了我一个名

    • 问题内容: 我正在尝试在我的c程序中检测从Linux关闭或重新启动。我发现程序可以使用signal(SIGTERM,handler)(SIGKILL,handler)。但是,如果用户也使用命令杀死该进程,这两个触发器也会触发。 他们说,在某些解决方案中,可以使用运行级别,但无法运行。在系统初始化运行级别之前,不知道该进程是否被杀死。我什至尝试将脚本放在rcx.d中,但仍然无法正常工作。 有人建议吗