保存JPanel图形

kel*_*lab 3 java swing

我不太确定图形如何在Java中工作,所以我在调试问题时遇到问题.我有一个类MyFrame扩展JPanel.现在我在MyFrame上做一些绘图保存并保存关于该特定帧的属性,然后添加一个MyFrames的ArrayList集合.后来我想回忆一下MyFrame的某个实例的属性,并在屏幕上重绘该帧.让框架的图形再次显示是我遇到的麻烦.

这是一个快速的代码,将演示我的问题.

public class MyFrame extends JPanel{
private int property;
private int x;
private int y;

public MyFrame(int xp, int yp){
x = xp;
y = yp;
}

@override
public void paintComponent(Graphics g){
super.paintComponent(g);
g.fillRect(x,y,5,5);
}
public void setProperty(int p){
property = p;
}
}

public class MainClass() extends JPanel{
private ArrayList<MyFrame> frames = new ArrayList<MyFrame>;
private MyFrame currentFrame = new MyFrame();

public void addFrame(int x, int y){
this.remove(currentFrame);
currentFrame = new MyFrame();
this.add(currentFrame);
frames.add(currentFrame);
}

public void setFrame(int frame){
this.remove(currentFrame);
currentFrame = frames.get(frame);
this.add(currentFrame);
}

}
Run Code Online (Sandbox Code Playgroud)

简介:我希望面板在调用setFrame时显示正确的框架.目前,当我这样做时,设置框架将为空白.

Hov*_*els 5

您似乎正在将JPanel交换进出另一个JPanel,并且在执行此操作时,您必须考虑容器-JPanel使用的布局,并且您需要在交换后调用revalidate并重新映射容器-JPanel.

但是,为什么不通过使用CardLayout交换JPanels或JLabel与ImageIcons来保存图像,而不是搞砸所有这些?