我很擅长摇摆,我希望得到一些帮助,因为我坚持完成任务。
当前状态:
我有一个很好的JFrame
对象(guiFrame),它上面有两个JPanel
(tabsPanel和cardPanel)(一个是带按钮的简单JPanel
,另一个是{{{ 1}}由tabsPanel按钮切换)。
问题:
任务是如果我按下按钮"显示"在tabsPanel上我需要将cardPanel作为静态"图像"发送到另一个窗口(ShowFrame),而在上一个窗口中,程序仍然运行且很好。所以基本上我试图复制/克隆cardPanel。
我尝试了什么:
我试过简单地
CardLayout
当然不能正常工作,因为正在复制参考编号,如果我运行该程序,则cardPanel"消失"。
我试图使用JPanel jPanelShow = cardPanel;
show.add(jPanelShow);
为此它几乎可以工作,但我得到了一些奇怪的clone()
,这不是由我的代码引起的。
当前代码(克隆尝试):
CardPanel.java
NullPointerException
CardLayoutExample.java
/**
* This is basicly a JPanel, just with a clone() implemented
*/
package javaapplication5;
import javax.swing.JPanel;
import java.util.Stack;
public class CardPanel extends JPanel implements Cloneable {
public CardPanel() {
super();
}
@Override
public CardPanel clone() throws NullPointerException {
/* Creating return object */
final CardPanel copy;
try {
/* Cloning */
copy = (CardPanel) super.clone();
} catch (CloneNotSupportedException e) {
/* Exception (should not happen though) */
e.printStackTrace();
return null;
}
return copy;
}
}
TestContent,TestContent1和TestContent2是由SwingGUI生成的随机内容的简单JPanel,就像ShowFrame是空的JFrame一样。但如果需要,我也会粘贴这些代码。
答案 0 :(得分:2)
如果您只需要cardPanel
的“图片”,则可以创建图片并使用JLabel
来显示,例如......
BufferedImage img = new BufferedImage(cardPanel.getWidth(), cardPane.getHeight(), BufferedImage.BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = img.createGraphics();
cardPanel.printAll(g2d);
g2d.dispose();
现在您拥有cardPanel
的“副本”,您可以使用JLabel
来显示它,例如......
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.DIPOSE_ON_CLOSE);
frame.add(new JLabel(new ImageIcon(img)));
frame.pack();
frame.setLocationRelativeTo(this);
frame.setVisible(true);