2014-10-03 3 views
1

мне нужна помощь в JInternalFrame внутри Area.I JPanel в есть JFrame, который содержит JPanel добавляются к его ContentPane.JFrame Содержит меню, когда я нажмите на одну из его пункта меню я нужен JInternal кадра будет добавлен верхняя часть contentpane.The кодекса я дал до сих пор,JInternal кадров За JPanel

JDesktopPane desktop = new JDesktopPane(); 
    desktop.setLayout(new BorderLayout()); 

    JPanel topPanel = new JPanel(); 
    GridBagLayout gbl_contentPane = new GridBagLayout(); 
    gbl_contentPane.columnWidths = new int[] { 0, 0, 0, 0 }; 
    gbl_contentPane.rowHeights = new int[] { 0, 0, 0, 0 }; 
    gbl_contentPane.columnWeights = new double[] { 1.0, 6.0, 1.0, 
      Double.MIN_VALUE }; 
    gbl_contentPane.rowWeights = new double[] { 0.0, 8.0, 0.0, 
      Double.MIN_VALUE }; 
    topPanel.setLayout(gbl_contentPane); 

    JPanel left = new JPanel(); 
    GridBagConstraints gbc_left = new GridBagConstraints(); 
    gbc_left.insets = new Insets(0, 0, 5, 5); 
    gbc_left.fill = GridBagConstraints.BOTH; 
    gbc_left.gridx = 0; 
    gbc_left.gridy = 1; 
    topPanel.add(left, gbc_left); 

    JPanel middle = new JPanel(); 
    GridBagLayout gbl_middle = new GridBagLayout(); 
    gbl_middle.columnWeights = new double[] { 1.0 }; 
    middle.setLayout(gbl_middle); 
    GridBagConstraints gbc_middle = new GridBagConstraints(); 
    gbc_middle.insets = new Insets(0, 0, 5, 5); 
    gbc_middle.fill = GridBagConstraints.BOTH; 
    gbc_middle.gridx = 1; 
    gbc_middle.gridy = 1; 
    topPanel.add(middle, gbc_middle); 

    GridBagConstraints gbc = new GridBagConstraints(); 
    JPanel panel1 = new JPanel(); 
    Border eBorder = BorderFactory.createEtchedBorder(); 
    panel1.setBorder(BorderFactory.createTitledBorder(eBorder, "70pct")); 
    gbc.gridx = 0; 
    gbc.gridy = 0; 
    gbc.fill = GridBagConstraints.BOTH; 
    gbc.weightx = gbc.weighty = 30; 
    middle.add(panel1, gbc); 
    panel1.setLayout(new MigLayout("", "[944.00,grow][353.00]", 
      "[6.00][128.00,grow][]")); 

    /*lblHeader = new JLabel(
      "<html>Indira Institute of Technology<br>Tatabad<br>Karpagam Complex Stop<br>Coimbatre</html>"); 
    lblHeader.setIcon(new ImageIcon(
      "C:\\Users\\Prakash\\Desktop\\images.jpg")); 
    panel1.add(lblHeader, "cell 0 1 2 1,alignx center,aligny center");*/ 

    JPanel panel2 = new JPanel(); 
    gbc = new GridBagConstraints(); 
    panel2.setBorder(BorderFactory.createTitledBorder(eBorder, "30pct")); 
    gbc.gridy = 1; 
    gbc.gridwidth = gbc.gridheight = 1; 
    gbc.fill = GridBagConstraints.BOTH; 
    gbc.anchor = GridBagConstraints.NORTHWEST; 
    gbc.weightx = gbc.weighty = 70; 
    gbc.insets = new Insets(2, 2, 2, 2); 
    middle.add(panel2, gbc); 
    panel2.setLayout(new MigLayout(
      "", 
      "[30px][69.00px][144.00][68.00][][159.00px][59.00px][65px][28.00][]", 
      "[20px:n,grow 50,shrink 50][20px:n,grow 50,shrink 50][20px:n,grow 50,shrink 50][20px:n,grow 50,shrink 50][30.00][48.00:n,grow 50,shrink 50]")); 

    getContentPane.add(topPanel); 

Я никогда не использовал DesktopPane в этом (я не знаю, как использовать это в данной ситуации) и экран далеко следующим образом: a busy cat http://i60.tinypic.com/nmnvgi.png

Теперь мне нужно, чтобы JInternalFrame быть добавлен к предыдущему экрану, как следует, a busy cat http://i59.tinypic.com/2vifih1.png

Я знаю, что я могу только быть в состоянии добавить JInternalFrame к DesktopPane.But я Уже Заполненным моему ContentPane с JPanel, чтобы показать свою content.H я могу достичь Jinternal Рамка, которая будет добавлена ​​в этот JFrame.Kindly дайте свои ценные предложения.

ответ

0

Что именно вы действительно хотите?

Вы написали, что у вас уже есть панель содержимого, добавленная в ваш фрейм. JDesktopPane должен иметь свое собственное пространство. Если у вас нет или вы не хотите резервировать место для внутренних фреймов в своем основном фрейме, возможно, вы даже не хотите, чтобы он был частью основного фрейма. В этом случае вы можете использовать дочерний объект JDialog s вместо JInternalFrame s.

Так что либо добавьте JDesktopPane в свой основной кадр (с зарезервированным пространством), либо используйте дочерний элемент JDialog s, который может быть модальным или нет и может перекрывать любую часть основного кадра. JInternalFrame s видны только в области JDesktopPane, в то время как ребенок JDialog s может «плавать» над вашим основным фреймом.

Заканчивать эту документацию Oracle: How to Use Internal Frames

И How to Make Dialogs.

2

Не совсем в правильном направлении. Исходная панель находится под управлением диспетчера компоновки, это означает, что при добавлении к ней JInternalFrame менеджер макета хочет попробовать и развернуть его.

В общем, JInternalFrame хочет проживать в неуправляемом контейнере, что позволяет размещать его и независимо от его содержимого.

Возможное решение могло бы быть, чтобы воспользоваться стеклянной панели для JInternalFrame вместо этого, для более подробной информации см How to Use Root Panes

Другим решением может быть использование JLayeredPane. В основном, вы должны начать с установки диспетчера компоновки JLayeredPane на что-то ссылку BorderLayout добавьте в него первую панель, а затем добавьте вторую прозрачную панель, без макета, над ней. Вы добавили бы JInternalFrame s к этой второй панели.

How to Use Layered Panes см для более подробной информации

Вопрос, который выскакивает на меня, хотя это ... почему? Почему бы вам просто не использовать какой-то диалог?См. How to Make Dialogs для получения более подробной информации.

+0

Yup Я могу использовать dialogs.But Если это диалог, он полностью возьмет на себя управление фокусом. Мы не можем свести его к минимуму, мы не можем открыть другой экземпляр it.right? я выбираю JinternalFrame. – Prakash

+0

Технически вы должны иметь возможность создавать столько экземпляров приложения, сколько хотите, предполагая, что вы имеете в виду создание нового экземпляра JVM. Вы можете настроить немодальный диалог, но тогда вы должны задать вопрос о том, почему? Чего вы пытаетесь достичь. Диалог - отличный способ получить быструю информацию от пользователя, который затем может быть уволен ... – MadProgrammer

+0

sorry.I не означал экземпляр приложения. Что мне действительно нужно, подумайте, что мне нужна регистрационная форма для открытия, когда я нажмите на пункт меню. Если я использую диалог, я могу открыть только одну регистрационную форму за раз. Это не так? Но мне нужно, чтобы пользователь мог открыть любое количество экранов входа. Он не имеет полного один экран, прежде чем он откроет другой. Это ситуация, в которой я работаю. Пожалуйста, направьте меня в правильном направлении. – Prakash

Смежные вопросы