#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
инструкцию. Спасибо