代码的工作原理如下:
输入数字时,将对img1进行一些修改,弹出修改后的img1。然后输入另一个数字,将弹出新修改的img1。
问题是当新修改的img1弹出时,旧的不会关闭。所以输入5个数字后,将会有5个窗口打开。
如何修改代码,以便在出现新窗口时,旧窗口会关闭?
while(true){
System.out.println("Choose a frame: ");
int a = sc.nextInt();
if (a>12){
break;
}
//some modifications to img1 here
JFrame frame = new JFrame();
JLabel lblimage = new JLabel(new ImageIcon(img1));
frame.getContentPane().add(lblimage, BorderLayout.CENTER);
frame.setSize(848, 480);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
答案 0 :(得分:0)
我会创建你在while循环之外使用的JFrame的实例。 (或者可能是包含它的方法/函数。因此,当你调用方法时,你没有创建一个JFrame对象,你可以只修改一个已经存在的对象。)
如果你坚持一遍又一遍地创建一个新的JFrame,你可以实现这个来关闭JFrame窗口:
frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
这就好像你关闭了窗户一样。
答案 1 :(得分:0)
为什么不试试这个:
JFrame frame = null;
while(true){
if(frame != null){
frame.dispose();
}
...
frame = new JFrame();
...
}
有了这个,你应该只有一个JFrame
的实例。