在Java中添加JInternalFrame不起作用

时间:2016-01-05 17:09:55

标签: java jframe jinternalframe jdesktoppane

我尝试过多种方式将内部框架添加到现有框架中。我曾尝试使用和不使用JPanel。但没有任何效果,我也不知道为什么。任何人吗?

public class Menu_new extends JFrame{


private BufferedImage background = null;


public Menu_new() {

    try {
        background = ImageIO.read(new File("pics_1/hallo.jpg"));
    } catch (IOException e) {
        e.printStackTrace();
    }

    JDesktopPane desktop = new JDesktopPane();
    JInternalFrame inside = new JInternalFrame(("Data"), true, true, true, true);
    desktop.add(inside);



    inside.setBounds(50, 50, 300, 500);
    inside.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    inside.setVisible(true);
    JLabel label = new JLabel("Your name");
    inside.add(label);

    JTextField text = new JTextField(10);
    inside.add(text);
    Icon icon = new ImageIcon("pics_1/Button.png");
    JButton start = new JButton(icon);
    start.setBorder(BorderFactory.createEmptyBorder());

    inside.add(start);

    inside.moveToFront();
    this.add(desktop);
 }


 public void paintComponent(Graphics g) {

        g.drawImage(background, 0, 0, this);
 }

}

1 个答案:

答案 0 :(得分:1)

将组件添加到内部框架的方法是错误的。

默认布局管理器(对于内部框架和JFrame)是BorderLayout,因此需要您指定要放置组件的位置。 (作为一种特殊情况,如果您只添加一个组件,它似乎可以在不指定约束的情况下工作)。

添加组件的代码应如下所示:

inside.add(label, BorderLayout.PAGE_START);
...
inside.add(text, BorderLayout.CENTER);
...
inside.add(start, BorderLayout.PAGE_END);

作为补充说明,此inside.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);无效,因为JFrame.EXIT_ON_CLOSE对内部框架无效。