在执行时将JInternalFrame添加到JDesktopPane

时间:2011-09-23 15:25:49

标签: java swing jinternalframe jdesktoppane

我遇到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);
    }
    (...)
}

3 个答案:

答案 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就不再猜测,正如其他人已经说过的那样