我在JPanel中的JApplet中有一个JButton,单击该按钮时会执行一些操作,更改JPanel的内容,然后重新绘制。但是,除了按钮本身,它似乎还没有重绘任何东西,而JPanel也正在重绘它的自我。但是,我认为我需要让JApplet重新绘制自身。本质上,我将单击其中一个按钮,按钮将发生变化,但是JLabel将不会显示。一旦我重新调整了applet的大小,或者在浏览器中将其缩小到浏览器侧面碰到applet的大小,所有这些重置并且看起来很棒!
按钮代码之一如下:

reset.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
            {
                //resets the vars
            questions = 0;
            wrong = 0;
            correct = 0;
            //clears the JPanel
            overallJP.removeAll();
            //adds new question, and buttons
            rand = generator.nextInt(10);
            JLabel tmp = new JLabel("Answer the Question: "+"\n"+qArr.get(rand).getQuestion());
            overallJP.setSize(new Dimension(500,700));
            overallJP.add(tmp);
            overallJP.add(buttonArea);
            overallJP.repaint();
            setVisible(true);
            repaint();
            }
        });


和其他按钮看起来相似。我认为问题出在底部的repaint()上。有没有办法从这个匿名函数内部调用JApplet的重绘?重置按钮在applet的init()中声明。如果您有更多问题或需要更多代码,请问!

最佳答案

由于要从面板中删除组件,因此可能需要重新验证它。尝试添加:validate();

编辑:

Container.validate()触发容器的重新布局。修改容器后应调用它-显示容器后添加,删除组件等。

10-06 05:30