添加 java 2d 组件后如何刷新 JFrame

how to refresh JFrame after after adding java 2d components

在这段代码中,我向 jframe 添加了两个组件,还使用了 revalidate 和 repaint,但只有一个组件被查看。我需要一种方法来刷新 jframe

class A extends JPanel{
    int i ,j;
    A(int i,int j){
        this.i = i;
        this.j = j;
    }
    @Override
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.drawOval(i,j,10,10);
    }
}

public class T2d extends JPanel
{

    public static void main(String[] args) {

        JFrame jFrame = new JFrame("hi");
        jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);

        jFrame.add(new A(50,50));
        jFrame.revalidate();//revalidate and repaint doesn't refresh the frame
        jFrame.repaint();//i have read all the past question about this
                        //but none of them solved my problem.

        jFrame.add(new A(1000,100));
        jFrame.revalidate();
        jFrame.repaint();

        jFrame.setVisible(true);

    }
}

JFrame 默认使用 BorderLayout,因此布局管理器只会更新您添加的最后一个组件 (BorderLayout)

您可以尝试更改布局管理器,可能是 FlowLayoutGridLayout,但由于 A 不会覆盖 getPrefferedSize 方法,它的大小将调整为0x0 无论如何由布局管理器。

有关详细信息,请参阅 Laying Out Components Within a Container

在尚未显示的 window 上调用 revalidaterepaint 也是毫无意义的