问题描述
我试过用使用Jframe.validate()可以在新增之后正确显示,但删除之后调用Jframe.validate()却不能正确显示。Jframe.add(JComponent);Jframe.validate();Jframe.validate()更新组件之后为什么又不在窗口上同步显示呢?书本上的做法是Jframe.add(JComponent);Jframe.setVisible(false);Jframe.setVisible(true);我的问题是除了上面的做法之外,还有什么比较靠谱的做法呢?麻烦各位指点一下,谢谢哈。 问题补充:import java.util.Scanner;import javax.swing.JButton;import javax.swing.JFrame;public class Test{ public static void main(String[] args) { Scanner Scr = new Scanner(System.in); JButton Jbt = new JButton("OK"); JFrame Jfr = new JFrame(); Jfr.setSize(200, 200); Jfr.setLocationRelativeTo(null); Jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Jfr.setVisible(true); Scr.nextLine(); //这里插入你认为可行的更新JFrame代码 Jfr.pack(); Scr.nextLine(); Jfr.pack(); //同上 }}代码的意思是每次在命令行输入一行字符即改变一次JFrame。请大家先试一试再说吧,到3楼为止还没有正确的方法啊。
解决方案
import java.util.Scanner; import javax.swing.JButton; import javax.swing.JFrame;import java.awt.*;public class Test{ public static void main(String[] args) { Scanner Scr = new Scanner(System.in); JButton Jbt = new JButton("OK"); JFrame Jfr = new JFrame(); Jfr.setSize(200, 200); Jfr.setLocationRelativeTo(null); Jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Jfr.setVisible(true); Scr.nextLine(); Jfr.setSize(250, 250); Jfr.repaint(); Scr.nextLine(); Jfr.add(Jbt, BorderLayout.CENTER); Jfr.setSize(100, 100); Jfr.repaint(); } } 也是没有问题的啊
解决方案二:
是要这效果么?import java.util.Scanner; import javax.swing.JButton; import javax.swing.JFrame; public class Test{ public static void main(String[] args) { Scanner Scr = new Scanner(System.in); JButton Jbt = new JButton("OK"); JFrame Jfr = new JFrame(); Jfr.setSize(200, 200); Jfr.setLocationRelativeTo(null); Jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Jfr.setVisible(true); Scr.nextLine(); Jfr.setSize(250, 250); Jfr.repaint(); Scr.nextLine(); Jfr.setSize(100, 100); Jfr.repaint(); } }
解决方案三:
jframe重新pack一下呢
解决方案四:
frame.repaint(); frame.validate(); frame.invalidate(); frame.validate();
解决方案五:
jframe.invalidate();