我有一个名为TabletAddDetails的Jframe,当我点击后退按钮时,Jframe TabletAddDetails将被隐藏并打开Jframe Tablet。 Jframe Tablet中有一个按钮,打开Jframe TabletAddDetails。有没有什么方法可以打开相同的以前隐藏的Jframe TabletAddDetails而不是一个全新的Jframe TabletAddDetails实例,这样当我回来时我的进度条更新不会丢失。
以下是Jframe TabletAddDetails中后面Buttom的代码
JButton btnBack = new JButton("BACK");
btnBack.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try
{
Tablet tab=new Tablet();
tab.setVisible(true);
tab.setLocationRelativeTo(null);
tab.setResizable(false);
tab.setTitle("Tablet");
setVisible(false);
try {
tab.setIconImage(ImageIO.read(new File("img/icon.png")));
}
catch (IOException exc) {
exc.printStackTrace();
}
}
catch (Exception e)
{
JOptionPane.showMessageDialog(null,e.getClass().getName() + ": " + e.getMessage());
}
}
});
以下是Jframe Tablet中按钮TabletAddDetails的代码
JButton btnDetails = new JButton("TabletAddDetails");
btnDetails.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try
{
TabletAddDetails tabadd=new TabletAddDetails();
tabadd.setVisible(true);
tabadd.setLocationRelativeTo(null);
tabadd.setResizable(false);
tabadd.setTitle("Tablet Add Details");
setVisible(false);
try {
tabadd.setIconImage(ImageIO.read(new File("img/icon.png")));
}
catch (IOException exc) {
exc.printStackTrace();
}
}
catch (Exception e)
{
JOptionPane.showMessageDialog(null,e.getClass().getName() + ": " + e.getMessage());
}
}
});
答案 0 :(得分:2)
即使我打开另一个Jframe TabletAddDetails实例,我也只是找到了更新进度条的解决方案。现在,当我回来时,进度条更新将继续。我以一种非常简单的方式实现它。我有时间使用swingworker完成功能。以前我在相同的Jframe TabletAddDetails中实现swingworker。现在我所做的非常简单,只需在src文件夹中创建另一个类并将swingworker中的所有代码复制到它并在我按下Jframe TabletAddDetails中的buttion时调用该类。
这里由于进度条的数据操作和更新是由另一个单独的类(即MVC中的模型)完成的,该类链接到您的Jframe(MVC中的视图),所以即使你关闭并回到相同的Jframe,功能部分仍将连接到它。所以我几乎不建议在实现java swing项目时遵循MVC。
答案 1 :(得分:0)
在新的jFrame中实施WindowListener并传递对父jFrame的引用。
void windowClosed(WindowEvent e) {
parent.setVisible(true);
}
答案 2 :(得分:0)
在TabletAddDetails的构造函数中使用对Tablet的引用作为参数
private JFrame myTablet;
public TabletAddDetails(JFrame parent) {
myTablet = parent;
}
...
JButton btnBack = new JButton("BACK");
btnBack.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
myTablet.setVisible(true);
// Maybe you have already set this in original instance
// myTablet.setLocationRelativeTo(null);
// myTablet.setResizable(false);
// myTablet.setTitle("Tablet");
setVisible(false);
...