如何使用JMenuItem在Java中重置我的GUI?

时间:2015-06-24 17:21:21

标签: java swing jframe jmenuitem

我有JFrame公开CardLayout,此JFrame包含一些JPanels用于不同的分析阶段,我想返回主面板并清除所有存储在对象中的数据使用JMenuItem开始新的分析,但我不知道哪个函数可以做到这一点。有什么建议吗?提前致谢。我试过这个代码,jMenuItem1ActionPerformed只是回到那个jpanel但是没有重置gui。 “Seleccion”是主要的jpanel,应用程序的主菜单

    panelPrincipal.removeAll();
    panelPrincipal.revalidate();
    panelPrincipal.repaint();

    panelPrincipal.add(seleccion);
    panelPrincipal.revalidate();
    panelPrincipal.repaint();

2 个答案:

答案 0 :(得分:3)

没有“一刀切”的解决方案,并且没有可以为此调用的核心Java“功能”,因为它取决于程序的结构。换句话说,您必须创建自己的重置机制。希望您的程序结构围绕模型 - 视图 - 控制(MVC)类型的模式构建,如果是这样,那么您的JMenuItem的侦听器将通知Control用户希望重置,Control将调用{{ 1}}在模型上(当然你必须创建一个方法),它会将模型重置为初始状态。应该有附加到模型的侦听器的视图将相应地更改其显示。

答案 1 :(得分:0)

从您的代码中,您可能已经尝试了一切可以想到的方法将所有内容重置为初始状态。

就个人而言,我认为删除所有组件并将其添加回来只是因为您想要重置它并不是一个好主意。您必须编写自己的代码以专门告知Java需要更改的内容(重置)。

例如,如果您有3个文本字段,则可以在动作侦听器中执行此操作:

public void actionPerformed(ActionEvent e){
    txtField1.setText("");
    txtField2.setText("");
    txtField3.setText("");
}

这样做有效,但它看起来很难编码,很难维护。图像,如果您有999个文本字段要处理。您可以随时改进程序结构,例如:

输入-->更新从数据库中读取的数据库-->文本字段

输入更新数据库。这些字段只是从数据库中读取的。如果要重置所有内容,只需清除数据库中的数据即可。

public void actionPerformed(ActionEvent e){
    //Delete records from database
    //Instead of updating all 999 fields.
}

这只是一个例子。由您决定如何构建您的程序。

repaint()基本上只是通知paintManager调用paintComponent()方法,你可能不会看到你的UI外观有任何不同,除非你做过覆盖{{{ 1}}并更改JComponents的外观或使用Graphics进行绘制。