我遇到JDesktopPane
的问题,我在其上添加JInternalFrame
,然后在JFrame
上显示。
问题是当我尝试在执行时添加另一个JInternalFrame
时。
我使用相同的方法添加相同的JInternalFrame
,但其dosnt显示出来。
public class Desktop extends JDesktopPane {
(...)
public void addJInternalFrameBox(JInternalFrameBox jifb) {
this.add(jifb, desktop.CENTER_ALIGNMENT);
this.repaint();
this.validate();
}
}
JInternalFrameBox类:
public class JInternalFrameBox extends JInternalFrame {
(...)
public JInternalFrameBox(Integer id) {
this.id = id;
setUpFrame();
}
public void setUpFrame() {
JLabel lbl = new JLabel("test");
lbl.setVisible(true);
this.add(lbl);
this.setPreferredSize(INTERNAL_FRAME_SIZE);
this.setLocation(100, 100);
this.setIconifiable(true);
this.setClosable(true);
this.pack();
this.setVisible(true);
}
}
jButtonBox打开JInternalFrameBox的按钮:
public class jButtonBox extends JButton implements MouseListener {
public void mouseReleased(MouseEvent e) {
JInternalFrameBox jifb = new JInternalFrameBox(id);
jifb.setVisible(true);
Desktop df = Desktop.getInstance();
df.addJInternalFrameBox(jifb);
}
(...)
}
答案 0 :(得分:4)
阅读How to Use Internal Frames上的Swing教程中的部分以获取工作示例。
答案 1 :(得分:3)
不要将JPanel用于桌面,而应使用JDesktopPane。这就是它的特别之处。
答案 2 :(得分:1)
您必须设置内部框架的位置和大小,如
setSize(INTERNAL_FRAME_SIZE); // instead of setPref
setLocation(100, 100);
嗯...也许不是(只是在你的代码中看到了包) - 没有sscce就不再猜测,正如其他人已经说过的那样