Прежде всего, я думаю, наконец, я думаю, что вы не должны использовать desktop.add(internalFrame, new Integer(1))
, а вместо этого desktop.add(internalFrame)
, причина в том, что JDesktopPane
использует свои слои (это подкласс JLayeredPane
) внутри, иЯ не думаю, что вы должны сами играть со слоями.
Затем, следуя этой задаче У меня был один раз с JInternalFrame
, я бы посоветовал вам позвонить pack()
после добавление внутреннего фрейма на панель рабочего стола.
Следовательно, вы должны попробовать, чтобы ваш класс OpenListener выглядел так:
class OpenListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if ((internalFrame == null) || (internalFrame.isClosed())) {
internalFrame = new JInternalFrame("Internal Frame", true, true, true, true);
internalFrame.setBounds(50, 50, 200, 100);
internalFrame.add(myTabbedPaneSample, BorderLayout.CENTER);
internalFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// internalFrame.pack();
internalFrame.setMinimumSize(new Dimension(300, 300));
// desktop.add(internalFrame, new Integer(1));
desktop.add(internalFrame);
internalFrame.pack();
internalFrame.setVisible(true);
}
}
}
Кроме того, я также согласен с комментариями trashgod по Action
конечно же, и упрощающая переделка, которую он проделал для вашего фрагмента.