我正在尝试在JDesktopPane内部创建一个JInternalPane,但它无法正确居中。
这是创建JDesktopPane的方式(我正在使用Netbeans拖放):
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) {}
我还设置了JInternalFrame的首选大小。
但是,登录框显示在desktopPane的左上方,其中大部分不可见(即,在desktopPane的“外部”)。
我主要关注this Java documentation。
我还从this post和this post获得了setLocation()信息。
我在做什么错而导致JInternalFrame无法被识别?任何帮助表示赞赏。
最佳答案
根据可用信息,我什么也不会说,这使我相信这与您未向我们展示的内容有关。
例如,如果我采用您发布的基本信息并将其粘贴到可运行的示例中,则可以正常工作
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来演示您的问题。这不是代码转储,而是您正在执行的操作的一个示例,突出显示了您所遇到的问题。这将减少混乱并改善响应
关于java - 在JDesktopPane内部居中JInternalFrame不能正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46109288/