2015-01-10 5 views
-1

의 모든 내용을 Jinternal 프레임으로 가져오고, jlabel, jtextfield 등을 추가하더라도 Jinternalframe이 버튼 뒤에 표시됩니다. 내부 프레임이 모든 것 뒤에 열립니다. 내가 tofront() 및 movetofront() 함수를 시도했지만 작동하지 않는 것 같습니다. plz 도움말, 감사합니다.새로운 버튼을 클릭 할 때이 코드에서

코드 : 새로운 버튼을 클릭

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import javax.swing.JFrame; 
import javax.swing.JButton; 
import java.awt.Color; 
import java.awt.FlowLayout; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 
import javax.swing.*; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class Messages2 extends JFrame { 

    JFrame frame; 
    JButton button1; 

    public static void main(String[] args) { 
     Messages2 window = new Messages2(); 
     window.frame.setVisible(true); 
    } 

    public Messages2() { 

     frame = new JFrame(); 
     frame.getContentPane().setBackground(Color.WHITE); 
     frame.setBounds(100, 100, 220, 220); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     //frame.getContentPane().setLayout(new FlowLayout()); 

     JButton btnNew = new JButton("New Message"); 
     btnNew.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       JDesktopPane desktopPane = new JDesktopPane(); 
       JInternalFrame intFrame = new JInternalFrame(
         "JInternalFrame demo"); 

       intFrame.setMaximizable(true); 
       intFrame.setIconifiable(true); 
       intFrame.setResizable(true); 
       intFrame.setClosable(true); 
       intFrame.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE); 

       intFrame.setSize(320, 240); 
       // intFrame.pack(); 
       intFrame.setVisible(true); 

       desktopPane.add(intFrame); 

       frame.add(desktopPane, BorderLayout.CENTER); 
      } 

     }); 
     btnNew.setBounds(1, 35, 145, 31); 
     frame.getContentPane().add(btnNew); 
    } 
} 

답변

1

이 JInternalFrame의 난 등 다른 것 같이, JLabel의, JTextField를을 추가하는 경우에도, 버튼 뒤에 간다,

기반 마지막 질문을 게시 한 코드 (삭제하기 전)에 모든 구성 요소를 프레임에 직접 추가하려고합니다. Swing은 구성 요소가 추가 된 순서와 반대 순서로 구성 요소를 그립니다. 그래서 내부 프레임이 마지막에 추가되기 때문에 가장 먼저 그려지며 다른 모든 구성 요소가 그 위에 페인트됩니다.

이것은 JInternalFrame으로 작업해야하는 방식이 아닙니다. JDesktopPane/JInternalFrames를 다른 구성 요소와 분리하고 각각을 별도로 사용해야합니다.

기본 정보 및 예제는 How to Use Internal Frames에있는 스윙 튜토리얼의 섹션을 읽으십시오.

  1. 내부 프레임이 프레임에 추가되는 JDesktopPane에 추가됩니다.
  2. 다른 구성 요소에 null 레이아웃을 사용하지 마십시오. Swing은 레이아웃 관리자와 함께 사용하도록 설계되었습니다. 이러한 구성 요소는 패널에 추가 된 다음 패널이 프레임에 추가되어야합니다.

패널 및 바탕 화면 창이 프레임의 다른 영역에 추가되어야합니다. 예 :

frame.add(panel, BorderLayout.NORTH); 
frame.add(desktopPane, BorderLayout.CENTER); 
+0

위 코드를 편집했는데 여전히 작동하지 않는 것 같은데요, 아직 누락 된 부분이 있습니까? 다른 레이아웃을 유지하면 내부 프레임은 여전히 ​​버튼 뒤쪽에 있습니다. –

+0

패널 (버튼)과 데스크탑 패널이 프레임의 다른 영역으로 이동해야하며 예제 코드가 있어야합니다. 코드가 내 것과 비슷한가요? BorderLayout의 어느 부분에 버튼을 추가하고 있습니까? 버튼을 놓을 위치를 지정하지 않으면?실천 사례로 시작하는 것이 어떻습니까? 튜토리얼에 대한 링크를 줬어. 튜토리얼을 읽는 동안 레이아웃 관리자에 대한 섹션을 읽을 수 있습니다.이 섹션에는 작업 예제가 들어있는 'How to Use BorderLayout' 섹션도 있습니다. – camickr

0

JInternalFrame을 올바르게 사용하고 있지 않습니다. 그것은 JDesktopPane 내에 위치해야합니다. 당신이하지 않는 것, 그리고 여러분이 시작하기를 제안합니다. appropriate tutorial on this을 확인하십시오.

JFrame의 기본 BorderLayout을 사용하기 때문에 단추와 JInternalFrame이 필드를 채 웁니다. 제안 :

  • 무엇보다도이 설명 완전히 단지 당신이 달성하기 위해 노력하고 정확한 효과/사용자 경험. 여기에서 JInternalFrame이 최선의 선택입니까?
  • 레이아웃 관리자를 최대한 활용하여 레이아웃 관리자를 최대한 활용하십시오.
  • JInternalFrame을 사용하려는 경우 ActionListener에 JInternalFrame을 추가해도 괜찮 으면 일반적으로 GUI 작성시 ActionListener가 아닌 GUI에 JDesktopPane을 추가하려고합니다.
+0

위의 코드를 편집 했는데도 여전히 작동하지 않는 것 같습니다. 아직도 무엇이 누락 되었습니까? 다른 레이아웃을 유지하면 내부 프레임은 여전히 ​​버튼 뒤에 있습니다. –

+0

@KumaylFazal : 답장 편집을 참조하십시오. –