用户输入导致frame.getContentPane.removeAll()停止工作

时间:2014-04-18 09:10:21

标签: java swing debugging jpanel

在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()仍然无法正常工作

2 个答案:

答案 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();
    }
}

我希望这会对你有所帮助。