Внутренние вдовы не отображаются на панели рабочего стола

#java #model-view-controller #factory-pattern #jinternalframe

#java #модель-представление-контроллер #заводской шаблон #jinternalframe

Вопрос:

После небольшого исследования в Интернете я создал панель рабочего стола и хочу поместить внутренние фреймы. Я использую шаблон factory для создания нескольких внутренних фреймов (windows)

У меня есть абстрактный класс

 import javax.swing.*;
public abstract class InternalWindowTemplate extends JInternalFrame{
JInternalFrame internalWindow;

public final void createInternalWindow(String title, int width, int height, int xOffset, int yOffset, boolean isResizable, boolean isClosable, boolean isMaximizable, boolean isIconifiable){
    internalWindow = new JInternalFrame(title, isResizable, isClosable, isMaximizable, isIconifiable);

    setInternalWindowSize(width, height);
    setInternalWindowLocation(xOffset, yOffset);
    internalWindow.setVisible(true);
    internalWindow.setDefaultCloseOperation(JInternalFrame.EXIT_ON_CLOSE);
     try {
        internalWindow.setSelected(true);
     } 
     catch (java.beans.PropertyVetoException exception) {
         exception.getMessage();
     }
     catch(Exception exception){
         exception.getMessage();
     }
}
 public void setInternalWindowLocation(int xOffset, int yOffset){
    setLocation(xOffset*getInternalWindowCounter(), yOffset*getInternalWindowCounter());
}

public void setInternalWindowSize(int width, int height){
    setSize(width,height);
}
}
 

а затем я создаю командное окно:

 import internalFrame.*;
import javax.swing.*;

public class CommandWindow extends InternalWindowTemplate {
   public CommandWindow(){
    createInternalWindow("Command window", 60, 40, 30, 30, false, true, false, false);
   }
}
 

Наконец, я создаю представление для своего графического интерфейса

 import java.awt.*;
import javax.swing.*;

public class DesktopView extends JFrame{
private JDesktopPane desktop;
InternalWindowTemplate commandWindow;

public DesktopView(){
    //Make the big window be indented 50 pixels from each edge of the screen.
    int inset = 50;
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    setBounds(inset, inset, screenSize.width  - inset*2, screenSize.height - inset*2);

    //Set up the GUI.
    desktop = new JDesktopPane();
    commandWindow = new CommandWindow();
    desktop.add(commandWindow);
    setContentPane(desktop);
}
}
 

Когда я пытаюсь запустить его в main

 public class DesktopApp {
public static void main(String[] agrs){
    DesktopView desktopView = new DesktopView();
    desktopView.setVisible(true);
    desktopView.setDefaultCloseOperation(DesktopView.EXIT_ON_CLOSE);
}
}
 

Я получаю только «большое» окно, но не внутренности. Что я делаю не так? Есть ли что-то, чего я не вижу? Любые предложения будут оценены. Заранее благодарю вас

Комментарии:

1. Ваш InternalWindowTemplate расширяет JInternalFrame И имеет экземпляр JInternalFrame . Вы уверены, что это то, что вы хотите?

2. Если бы я мог иметь конструктор внутри абстрактного класса, я бы использовал super() для определения внутреннего окна. Как я должен это сделать, если не использовать JInternalFrame объект?

3. хорошо, понял, просто удалил extends инструкцию. Спасибо