2017-09-08 19 views
0

JDesktopPane 내부에 JInternalPane를 작성하려고하고 있습니다 만, 올바르게 센터링하고 있지 않습니다.JDesktopPane 내의 JInternalFrame의 중앙 처리가 올바르게 동작하지 않습니다.

JDesktopPane desktopPane; 
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
setBounds(0, 0, screenSize.width/2, screenSize.height/2); 
desktopPane = new JDesktopPane(); 
setContentPane(desktopPane); 

그때 만든 JInternalFrame 등 : 나는 또한 적절한 사이즈의 설정

LoginUI login = new LoginUI(); 
Dimension desktopSize = desktopPane.getSize(); 
Dimension loginSize = login.getSize(); 
int width = (desktopSize.width - loginSize.width)/2; 
int height = (desktopSize.height - loginSize.height)/2; 
login.setLocation(width, height); 
login.setVisible(true); 
desktopPane.add(login); 
try { 
    login.setSelected(true); 
} catch (java.beans.PropertyVetoException e) {} 

JDesktopPane에가 (내가 넷빈즈의 드래그 앤 드롭을 사용하고 있습니다) 작성 방법은 다음과

입니다 JInternalFrame

그러나 로그인 프레임은 desktopPane의 왼쪽 상단에 표시되며 대부분은 표시되지 않습니다 (예 : desktopPane의 "외부").

대부분은 this Java documentation입니다. 또한 this post에서 this post까지 setLocation() 정보를 받았습니다.

여기에서 JInternalFrame이 cenetered되지 않는 원인은 무엇입니까? 어떤 도움을 주셔서 감사합니다.

+0

'Toolkit.getDefaultToolkit(). getScreenSize()'는 작업 표시 줄이나 도킹과 같은 시스템 요소를 고려하지 않으므로 잘못된 선택입니다.'setLocationRelativeTo '및 그것을'null' 패스 – MadProgrammer

+0

'LoginUI'는 미리 정의 된 크기를 가지지 않고 현재 크기가'0x0'입니다. – MadProgrammer

+0

@MadProgrammer - JInternalFrame에 링크 된 첫 번째 게시물에 따르면 setLocationRelativeTo (null) 구현. 나는 어쨌든 그것을 테스트하고 오류가 발생했습니다. 또, LoginUI (my JInternalFrame)는, 내가 기재 한대로, 미리 정의 된 사이즈를 가지고 있습니다. 프레임의 일부를 볼 수 있습니다. 일부는 JDesktopPanel 밖에 있습니다. 예를 들어 위치를 setLocation (200,300)으로 설정하면 프레임이 JDesktopPane 내에서 완전히 볼 수 있습니다. – Ebad

답변

1

사용할 수있는 정보를 기반으로 나는 아무 말도하지 않으며, 이는 내가 당신에게 보여주지 않은 것과 관련이 있다고 믿게합니다.

내가 기본 정보를 가지고 예를 들어, 당신이 게시 한 및 실행 가능한 예에 붙여 그것을 잘 작동

Internal Frame

import java.awt.Dimension; 
import java.awt.EventQueue; 
import javax.swing.JDesktopPane; 
import javax.swing.JFrame; 
import javax.swing.JInternalFrame; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JDesktopPane dp = new JDesktopPane(); 
       dp.setPreferredSize(new Dimension(200, 200)); 

       JInternalFrame iFrame = new JInternalFrame("Test", true, true, true, true); 
       iFrame.getContentPane().setPreferredSize(new Dimension(100, 100)); 
       iFrame.pack(); 
       iFrame.setVisible(true); 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(dp); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 

       dp.add(iFrame); 

       Dimension desktopSize = dp.getSize(); 
       Dimension loginSize = iFrame.getSize(); 

       int x = (desktopSize.width - loginSize.width)/2; 
       int y = (desktopSize.height - loginSize.height)/2; 
       iFrame.setLocation(x, y); 

       frame.setVisible(true); 
      } 
     }); 
    } 

} 

이 코드에서 뭔가가 있음을 시사하는 당신을 귀하의 문제를 일으키는 공유하지 않음

문제를 나타내는 runnable example을 제공해보십시오. 이것은 코드 덤프가 아니지만 수행중인 문제의 예를 보여줍니다. 이렇게하면 혼동이 적고 응답이 좋아집니다.

+0

감사합니다. 나는 정말로 이상한 방법으로 나의 것을 세웠다. 당신의 모범을 가지고 노는 것은 내가 가진 것보다 더 잘 구현하는 방법을 보여주었습니다. 때때로 드래그 앤 드롭 방식은 의도 한 것보다 더 복잡 할 수 있습니다. – Ebad