2014-10-03 153 views
1

我需要JPanel的Area.I内的JInternalFrame一些帮助有一个包含 的JPanel添加到其ContentPane.JFrame一个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我 已经填满我用的JPanel contentPane中,以显示其content.How我能做到Jinternal 框架将被添加在此JFrame.Kindly给你宝贵的建议。

回答

0

你真正想要什么?

你写了你已经有你的内容窗格添加到您的框架。 JDesktopPane必须有自己的空间保留。如果您没有或者您不想为主框架中的内部框架预留空间,那么您可能甚至不希望它成为主框架的一部分。在这种情况下,您可能需要使用儿童JDialog而不是JInternalFrame s。

因此,或者将JDesktopPane添加到您的主框架(保留其空间)或使用子模块JDialog,它们可以是模式或不可以,并且可以与主框架的任何部分重叠。 JInternalFrame只在JDesktopPane的区域中可见,而子JDialog可以“漂浮”在主框架上。

看看这个Oracle文档:How to Use Internal Frames

而且How to Make Dialogs

2

不是真正的正确方向。你原来的面板是在布局管理器的控制下,这意味着当你添加JInternalFrame时,布局管理器想要尝试并布局它。

一般来说,一个JInternalFrame想要驻留在一个不受管理的容器中,允许它独立于内容定位和调整大小。

一种可能的解决办法可能是利用玻璃板的JInternalFrame相反,详细内容见How to Use Root Panes

另一种解决方案可能是使用JLayeredPane。基本上,您首先要将JLayeredPane的布局管理器设置为BorderLayout将第一个面板添加到该面板,然后在其上添加第二个没有布局的透明窗格。您可以将JInternalFrame添加到第二个面板。

How to Use Layered Panes更多细节

,在跳出我虽然是......为什么这个问题?你为什么不直接使用某种对话?请参阅How to Make Dialogs了解更多详情

+0

是的,我可以使用dialogs.But如果它的对话框它将完全控制focus.We不能将它最小化,我们不能打开它的另一个实例。我选择JinternalFrame。 – Prakash 2014-10-03 07:28:23

+0

从技术上讲,您应该能够根据需要创建尽可能多的应用程序实例,假设您的意思是创建JVM的新实例。你可以设置一个非模态对话框,但是你不得不问一个为什么?你试图达到什么目标?对话是一种很好的方式从用户那里获得快速信息,然后可以被解雇... – MadProgrammer 2014-10-03 07:31:18

+0

对不起。我不是指一个应用程序的实例。我真正需要的是什么,考虑我需要一个注册表单打开时,我点击一个菜单项。如果我使用对话框,我可以一次只能打开一个注册表单。但是,我需要什么是用户可以打开任意数量的登录屏幕。他没有完整的一个屏幕,然后再打开另一个屏幕。这是我工作的情况。请引导我朝着正确的方向前进。 – Prakash 2014-10-03 07:38:21