在JFrame中,我正在用另一个JPanel替换Jpanel。
package testing;
import java.io.*;
import java.util.*;
import java.security.*;
import javax.xml.bind.DatatypeConverter;
import java.lang.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Testing extends JPanel {
JLabel jl;
ImageIcon icon;
Point pointer;
public static void main(String[] args) {
JFrame jf = new JFrame();
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
JLabel jl1 = new JLabel("Hey1");
JLabel jl2 = new JLabel("Hey2");
jp1.add(jl1);
jp2.add(jl2);
jf.add(jp1);
jf.setVisible(true);
jf.pack();
Scanner myScanner= new Scanner(System.in);
int x = myScanner.nextInt(); // the line causes the code to not work ,
// what is happening
jf.getContentPane().removeAll();
jf.add(jp2);
}
}
奇怪的是,代码在我尝试读取用户输入时停止工作
int x = myScanner.nextInt();
代码:jf.getContentPane().removeAll();
停止工作,我无法移除当前的JPanel并添加新的JPanel
我需要在更换JPanel之前读取用户输入,我该如何解决这个问题?
注意:即使在我输入内容后,jf.getContentPane()。removeAll()仍然无法正常工作
答案 0 :(得分:2)
使用validate()
布局容器的子组件。另外pack()
{/ 1}} 之前
Window
。
或者,使用CardLayout
更改视图,使用JTextField
收集用户输入。
经测试:
setVisible()
答案 1 :(得分:-1)
问题不在于程序是"停止工作"在这一行:
Scanner myScanner = new Scanner(System.in);
当然这行需要你在控制台中插入一些整数值,但这很有效。
实际上你的程序并没有停止工作:它只是执行所有的表达式,然后等待永远,它不会结束,因为存在永远循环的GUI线程。
关键是您调用的方法不正确以获得所需的结果,请检查我的代码(在最后几行中修改),如果这可以满足您的要求:
public class Testing extends JPanel {
JLabel jl;
ImageIcon icon;
Point pointer;
public static void main(String[] args) {
JFrame jf = new JFrame();
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
JLabel jl1 = new JLabel("Hey1");
JLabel jl2 = new JLabel("Hey2");
jp1.add(jl1);
jp2.add(jl2);
jf.add(jp1);
jf.setVisible(true);
jf.pack();
Scanner myScanner = new Scanner(System.in);
int x = myScanner.nextInt(); // the line causes the code to not work ,
// what is happening
jf.setContentPane(jp2);
jf.pack();
}
}
我希望这会对你有所帮助。