所以我在 JFrame 上有一个 desktopPane,在 desktopPane 上是一个 JInternalFrame。现在我将 internalFrame 的位置设置为 desktopPane 的中心,但是当我调整整个 Frame 的大小时,InternalFrame 保持在原来的位置并且不会将位置更改为新的中心。
public void openLogin(){
JInternalFrame iFrame = new LoginScreen(appMain);
desktopPane =new JDesktopPane();
add(desktopPane);
frameSize = getSize();
desktopPane.setSize(frameSize);
Dimension desktopSize = desktopPane.getSize();
Dimension jInternalFrameSize = iFrame.getSize();
iFrame.setLocation((desktopSize.width - jInternalFrameSize.width)/2, (desktopSize.height- jInternalFrameSize.height)/2);
desktopPane.add(iFrame);
}
这是我设置位置的方法,如何更改它以匹配新中心?我和一些听众一起尝试过,但没有任何效果。
好的,所以因为我没有时间使用来自充满 Eels 的 @Hovercraft 的答案,所以我再次尝试了一个组件监听器:
public void openLogin(){
JInternalFrame iFrame = new LoginScreen(appMain);
desktopPane =new JDesktopPane();
add(desktopPane);
frameSize = getSize();
newSize=frameSize;
desktopPane.addComponentListener(new ComponentListener() {
@Override
public void componentShown(ComponentEvent e) {
}
@Override
public void componentResized(ComponentEvent e) {
newSize = getSize();
}
@Override
public void componentMoved(ComponentEvent e) {
}
@Override
public void componentHidden(ComponentEvent e) {
}
});
if(newSize != frameSize){
desktopPane.setSize(newSize);
Dimension desktopSize = desktopPane.getSize();
Dimension jInternalFrameSize = iFrame.getSize();
iFrame.setLocation((desktopSize.width - jInternalFrameSize.width)/2, (desktopSize.height- jInternalFrameSize.height)/2);
desktopPane.add(iFrame);
}
else{
desktopPane.setSize(frameSize);
Dimension desktopSize = desktopPane.getSize();
Dimension jInternalFrameSize = iFrame.getSize();
iFrame.setLocation((desktopSize.width - jInternalFrameSize.width)/2, (desktopSize.height- jInternalFrameSize.height)/2);
desktopPane.add(iFrame);
}
}
它甚至不会触发侦听器。@Hovercraft,我会试试你的东西,但不是今天,非常感谢你!
好的,我发现我失败了,它现在可以工作了:
public void openLogin(){
iFrame = new LoginScreen(appMain);
desktopPane =new JDesktopPane();
add(desktopPane);
frameSize = getSize();
newSize=frameSize;
addComponentListener(new ComponentListener() {
@Override
public void componentShown(ComponentEvent e) {
}
@Override
public void componentResized(ComponentEvent e) {
newSize = getSize();
System.out.println("blaaaa");
desktopPane.setSize(newSize);
Dimension desktopSize = getSize();
Dimension jInternalFrameSize = iFrame.getSize();
iFrame.setLocation((desktopSize.width - jInternalFrameSize.width)/2, (desktopSize.height- jInternalFrameSize.height)/2);
}
@Override
public void componentMoved(ComponentEvent e) {
}
@Override
public void componentHidden(ComponentEvent e) {
}
});
desktopPane.setSize(frameSize);
Dimension desktopSize = desktopPane.getSize();
Dimension jInternalFrameSize = iFrame.getSize();
iFrame.setLocation((desktopSize.width - jInternalFrameSize.width)/2, (desktopSize.height- jInternalFrameSize.height)/2);
desktopPane.add(iFrame);
}