【问题标题】:JApplet, JPanel, JButton, have to resize the applet to repaint()JApplet、JPanel、JButton,必须调整小程序的大小才能重新绘制()
【发布时间】:2012-10-11 03:25:18
【问题描述】:

我有一个 JButton,在 JPanel 中,在 JApplet 中,单击它时会执行一些操作,更改 JPanel 的内容,然后应该重新绘制。但是,它似乎并没有重绘按钮本身,而 JPanel 也在重绘它的自身。但是,我认为我需要让 JApplet 自己重新绘制。本质上,我会单击其中一个按钮,按钮会改变,但 JLabels 不会出现。一旦我重新调整小程序,或者在浏览器中将其缩小到浏览器的两侧接触到小程序,它就会全部重置并且看起来很棒! 其中一个按钮代码如下:

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 的重绘?重置按钮在小程序的 init() 中声明。如果您有更多问题或需要更多代码,请尽管提问!

【问题讨论】:

  • overallJP.removeAll(); 使用 CardLayout 作为 GUI 的那个部分。

标签: java swing button applet repaint


【解决方案1】:

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

编辑:

Container.validate() 触发容器的重新布局。它应该在容器被修改时调用——在容器显示后添加、删除组件等。

【讨论】:

  • 成功了!我会尽快接受你的回答,但同时你能解释一下 validate 对我有什么作用吗?还有,函数末尾的 repaint() 是在按钮上调用 repaint 还是在哪里调用?
  • @Samuraisoulification 正如我在上次编辑中提到的, validate() 用于触发容器布置其组件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 2016-02-29
  • 1970-01-01
相关资源
最近更新 更多