如何用JMenuItem重置Java中的GUI?

如何用JMenuItem重置Java中的GUI?,java,swing,jframe,jmenuitem,Java,Swing,Jframe,Jmenuitem,我有一个公共的JFrame,带有CardLayout,这个JFrame包括一些jpanel,用于不同的分析阶段,我想返回主面板并擦除对象中存储的所有数据,以使用JMenuItem启动新的分析,但我不知道哪个函数可以这样做。有什么建议吗 我试过使用这段代码,执行了一个jmenuitem1action,它只返回到那个jpanel,但没有重置gui。“Selecion”是主jpanel,即应用程序的主菜单 panelPrincipal.removeAll(); panelPrincipal.reval

我有一个公共的
JFrame
,带有
CardLayout
,这个
JFrame
包括一些
jpanel
,用于不同的分析阶段,我想返回主面板并擦除对象中存储的所有数据,以使用
JMenuItem
启动新的分析,但我不知道哪个函数可以这样做。有什么建议吗

我试过使用这段代码,执行了一个jmenuitem1action,它只返回到那个jpanel,但没有重置gui。“Selecion”是主jpanel,即应用程序的主菜单

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

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

没有“一刀切”的解决方案,也没有可以调用的核心Java“函数”,因为这一切都取决于程序的结构。换句话说,您必须创建自己的重置机制。希望您的程序结构是围绕一个Model-View-Control()类型的模式构建的,如果是这样,那么JMenuItem的侦听器将通知控件用户希望重置,控件将调用模型上的
reset()
(当然,您必须创建一个方法),从而将模型重置为初始状态。应该将侦听器连接到模型的视图将相应地更改其显示。

没有“一刀切”的解决方案,也没有可以调用的核心Java“函数”,因为这一切都取决于程序的结构。换句话说,您必须创建自己的重置机制。希望您的程序结构是围绕一个Model-View-Control()类型的模式构建的,如果是这样,那么JMenuItem的侦听器将通知控件用户希望重置,控件将调用模型上的
reset()
(当然,您必须创建一个方法),从而将模型重置为初始状态。应该将侦听器连接到模型的视图将相应地更改其显示。

没有“一刀切”的解决方案,也没有可以调用的核心Java“函数”,因为这一切都取决于程序的结构。换句话说,您必须创建自己的重置机制。希望您的程序结构是围绕一个Model-View-Control()类型的模式构建的,如果是这样,那么JMenuItem的侦听器将通知控件用户希望重置,控件将调用模型上的
reset()
(当然,您必须创建一个方法),从而将模型重置为初始状态。应该将侦听器连接到模型的视图将相应地更改其显示。

没有“一刀切”的解决方案,也没有可以调用的核心Java“函数”,因为这一切都取决于程序的结构。换句话说,您必须创建自己的重置机制。希望您的程序结构是围绕一个Model-View-Control()类型的模式构建的,如果是这样,那么JMenuItem的侦听器将通知控件用户希望重置,控件将调用模型上的
reset()
(当然,您必须创建一个方法),从而将模型重置为初始状态。应将侦听器连接到模型的视图将相应地更改其显示。

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

就我个人而言,我不认为仅仅因为要重置它就删除所有组件并将其添加回去是一个好主意。您必须编写自己的代码,专门告诉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外观有任何区别,除非您一直在执行重写
paintComponent()之类的操作
并更改JC组件的外观或使用图形进行绘图。

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

就我个人而言,我不认为仅仅因为要重置它就删除所有组件并将其添加回去是一个好主意。您必须编写自己的代码,专门告诉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外观有任何区别,除非您一直在执行重写
paintComponent()之类的操作
并更改JC组件的外观或使用图形进行绘图。

通过代码,您可以