다중 사용자 스윙 GUI 응용 프로그램을 만들고 로그 아웃하고 다시 로그인 할 때 사용자의 창 위치 및 크기 설정을 유지하려고합니다. 현재 창 위치를 얻고 있습니다. 사용자가 로그 아웃하여 파일에 저장할 때 부모 JFrame에서 getLocation()
및 getSize()
메서드를 사용하여 다시 값을 읽은 다음 다시 setLocation()
및 setSize()
을 사용하여 창 크기와 위치를 설정합니다.JFrame getLocation 및 setLocation이 시스템 테두리를 다르게 처리합니다.
오전 데 문제는 (내가 왼쪽 상단 모서리에있는 창을 세우면 getLocation
반환하는 대신 (0,0)
의 (1,54)
예)를 getLocation()
및 getSize()
,하지만 setLocation()
및 setSize()
하지 않는 시스템의 경계를 뺀 것으로 나타났습니다이다 . 그 결과 로그 아웃하고 다시 로그인 할 때마다 창이 닫히고 나면 약간 오프셋되고 약간 작게 나타납니다.
왜 이런 일이 일어날 지 또는 어떻게 해결할 수 있는지 누가 알 수 있습니까? 창 위치와 크기를 가져오고 설정하는 데 사용해야하는 다른 방법이 있습니까?
우분투 12.04에서 Java 1.7.0_45가 실행되고 있습니다.
감사합니다.
편집 : 나는 getLocationOnScreen()
대신 getLocation()
를 사용하는 경우도
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class JFrameTest
{
private JFrame frame;
private JButton button;
private Point lastLocation;
private Dimension lastSize;
private void run()
{
button = new JButton("Test");
button.addActionListener(listener);
lastLocation = new Point(0, 0);
lastSize = new Dimension(200, 200);
initFrame();
}
private void initFrame()
{
frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.getContentPane().add(button);
frame.setLocation(lastLocation);
frame.setPreferredSize(lastSize);
frame.pack();
frame.setVisible(true);
}
private ActionListener listener = new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == button)
{
lastLocation = frame.getLocationOnScreen();
lastSize = frame.getSize();
frame.dispose();
initFrame();
}
}
};
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable() {
public void run()
{
new JFrameTest().run();
}
});
}
}
, 나는이 같은 문제를 참조하십시오
다음 예는 문제가 내가보고하고 복제합니다.
실제로 [실행 가능한 예를 보여줍니다 그 문제 (https://stackoverflow.com/help/mcve) (참) setLocationByPlattform'난에 있다고 생각 당신은'사용하면 적은 추측 작업과 더 나은 응답 – MadProgrammer
을 포함하는 것 우분투는 화면을 0,0 상단에 놓습니다. – nachokk
@MadProgrammer - 내 문제를 복제하는 실행 가능한 예제가 포함되어 있습니다. 제안에 감사드립니다. @nachokk - 의견을 보내 주셔서 감사합니다. 위의 예제 코드에서'frame.setLocationByPlatform (true) '를 호출해도 문제가 해결되지 않는 것 같습니다. – dpkoch