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

时间:2015-06-23 06:36:51

标签: java swing graphics graphics2d

在这段代码中,我向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);

    }
}

1 个答案:

答案 0 :(得分:2)

默认情况下,

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

您可以尝试更改布局管理器,可能是FlowLayoutGridLayout,但由于A未覆盖getPrefferedSize方法,因此其大小将设为{{无论如何,布局管理员都会这样做。

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

在一个尚未显示的窗口上调用0x0revalidate也是毫无意义的