添加 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
)
您可以尝试更改布局管理器,可能是 FlowLayout
或 GridLayout
,但由于 A
不会覆盖 getPrefferedSize
方法,它的大小将调整为0x0
无论如何由布局管理器。
有关详细信息,请参阅 Laying Out Components Within a Container
在尚未显示的 window 上调用 revalidate
和 repaint
也是毫无意义的
在这段代码中,我向 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
)
您可以尝试更改布局管理器,可能是 FlowLayout
或 GridLayout
,但由于 A
不会覆盖 getPrefferedSize
方法,它的大小将调整为0x0
无论如何由布局管理器。
有关详细信息,请参阅 Laying Out Components Within a Container
在尚未显示的 window 上调用 revalidate
和 repaint
也是毫无意义的