2014-10-03 2 views
1

JPanel의 Area 내의 JInternalFrame에 도움이 필요합니다. 을 포함하는 JFrame이 있습니다. JPanel에 ContentPane.JFrame이 추가되었습니다. 메뉴 항목 i 중 하나를 클릭하면 메뉴가 나타납니다. JInternal Frame을 추가해야합니다. 내가 지금까지 준 contentpane.The 코드의 상단JInternal Frame Over 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

나는 단지 내가 이미 내가 달성 할 수는 content.How을 보여 JPanel의 내의 ContentPane을 가득 DesktopPane.But에 JInternalFrame를 추가 할 수 있다는 것을 알고있다 Jinternal 이 JFrame에 추가 될 프레임입니다. 제안 사항을 알려주십시오.

답변

0

정말 원하는 것은 무엇입니까?

이미 콘텐츠 창을 프레임에 추가했습니다. JDesktopPane은 자체 공간을 예약해야합니다. 당신이 가지고 있지 않거나 당신이 당신의 주요 구조에있는 내부 구조를위한 공간을 비축하고 싶지 않는 경우에, 어쩌면 당신은 그것을 주요 구조의 부분이되고 싶지 않다조차. 이 경우 JInternalFrame 대신 자식 JDialog을 사용하려고 할 수 있습니다.

따라서 JDesktopPane을 메인 프레임 (공간이 예약 됨)에 추가하거나 모달이 될 수 있거나 메인 프레임의 일부와 겹칠 수있는 JDialog 아이를 사용하십시오. JInternalFrameJDesktopPane 영역에서만 볼 수 있으며 JDialog 어린이는 메인 프레임을 "떠있을"수 있습니다. 이 Oracle 문서 밖으로

확인 : How to Use Internal Frames

그리고 How to Make Dialogs.

2

실로 올바른 방향입니다. 원래의 패널은 레이아웃 관리자의 통제하에 있습니다. 즉, JInternalFrame을 추가하면 레이아웃 관리자가 레이아웃을 시도하고 레이아웃하려고합니다.

일반적으로 JInternalFrame은 관리되지 않는 컨테이너에 있어야하므로 콘텐츠와 독립적으로 위치를 지정하고 크기를 조정할 수 있습니다.

가능한 솔루션 자세한 내용은 JLayeredPane를 사용하는 또 다른 방법이 될 수 How to Use Root Panes

를 참조하십시오, 대신 JInternalFrame의 유리 창을 활용할 수 있습니다. 기본적으로 JLayeredPane의 레이아웃 관리자를 무언가의 링크 BorderLayout에 설정하여 첫 번째 패널을 추가 한 다음 레이아웃이없는 두 번째 투명 패널을 추가하면됩니다. 이 두 번째 패널에 JInternalFrame을 추가합니다.

은 자세한 내용

... 왜 그러나 나를 밖으로 점프 질문에 대한 How to Use Layered Panes를 참조하십시오? 대신 왜 어떤 종류의 대화 상자를 사용하지 않습니까?자세한 내용은 How to Make Dialogs을 참조하십시오.

+0

대화를 사용할 수 있습니다. 그러나 대화 상자가 포커스를 완전히 제어 할 수 있으면 최소화 할 수 없습니다. 다른 인스턴스를 열 수 없습니다. JinternalFrame을 선택합니다. – Prakash

+0

기술적으로 JVM의 새 인스턴스를 만드는 것을 의미하는 것으로 가정 할 때 응용 프로그램의 인스턴스를 원하는만큼 만들 수 있어야합니다. 비 모달 대화 상자를 설정할 수 있지만 그 이유를 묻는다면? 달성하려는 목표는 무엇입니까? 대화 상자는 사용자로부터 빠른 정보를 얻을 수있는 훌륭한 방법입니다.이 경우 사용자는 기각 될 수 있습니다. – MadProgrammer

+0

죄송합니다. 응용 프로그램의 의미가 없습니다. 정말로 필요한 것은 무엇입니까? 내가 열 때 등록 양식이 필요하다고 생각합니다. 메뉴 항목을 클릭하십시오. 대화 상자를 사용하면 한 번에 하나의 등록 양식 만 열 수 있습니다. 그렇습니다.하지만 필요한 것은 사용자가 로그인 화면을 여러 개 열 수 있다는 것입니다. 그는 완료되지 않았습니다. 한 화면 전에 다른 사람을 열어 줘. 내가 일하는 상황이야. 날 올바른 방향으로 인도 해줘. – Prakash