ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-我的Swing GUI不更新.为什么?

2019-11-23 08:10:39  阅读:322  来源: 互联网

标签:repaint swing jpanel jscrollpane java


因此,我正在制作一个GUI,用户可以在其中添加或删除面板.为了模拟这一点,我制作了一个TimerTask,它使用了目标JPanel的名称以及包含JPanel的父级的名称.
它倒计数到0,然后从父级中删除JPanel,并在父级和祖父母级上调用repaint().

尽管删除了旧面板,但父面板中包含的其他组件却没有被取代.在图片中可以看到,滚动条仍指示2个组件.

我必须手动向下拖动滚动条才能看到它的变化,也就是当下面的组件抬起位置时.

为什么会这样呢?

这是组件的嵌套方式:

JScrollPane (grandparent)
|
|-> JPanel (parent)
    |
    |-> JPanel (target)  

SSCCE是不可能的,因为JPanels填充了XML文件中的数据并使用JAXB,所以..不可能:(但是这是TimerTask的摘录

import java.util.TimerTask;
import javax.swing.*;

public class RemoverTask extends TimerTask{
    StudentPanel s;
    JPanel h;
    JScrollPane p;
    public RemoverTask(StudentPanel s,JPanel holder,JScrollPane pane){
        this.s = s;
        h = holder;
        p = pane;
    }

    @Override
    public void run(){
        long x = Integer.MAX_VALUE/2;
        JFrame frame = new JFrame("Counter");
        JTextArea area = new JTextArea();
        JScrollPane pane = new JScrollPane(area);
        pane.setPreferredSize(new java.awt.Dimension(350, 350));
        frame.add(pane);
        frame.pack();
        frame.setVisible(true);
        while(x > 100){
            x =  x - 1500;
            area.append("Value of X: " + x + "\n");
        }
        if(!frame.isVisible()){
            frame.dispose();
        }
        h.remove(s);
        h.repaint();
        pane.repaint();
    }
}

解决方法:

您仍然可以创建一个scsc,只是不必担心xml数据等.简化问题,伙计.另外,请勿将Java.util.Timer与Swing应用程序一起使用,而应将javax.swing.Timer与Swing计时器一起使用.否则,您将根据Swing EDT进行Swing更改,这很危险.

问题:您永远不会在容器上调用revalidate().在对容器进行更改时,通常在容器上调用repaint()之前先调用revalidate().重新验证告诉布局管理器布局其组件,这是更改GUI所必需的.

标签:repaint,swing,jpanel,jscrollpane,java
来源: https://codeday.me/bug/20191123/2066423.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有