我有一个主JFrame(1),之后我想在下面放一个JDialog(2)(相同的左边框位置):
dialog2.setLocation(frame.getX(),frame.getY()+ frame.getHeight());
并将另一个JDialog(3)放在右边(相同的顶部边框位置):
dialog3.setLocation(frame.getX()+ frame.getWidth(),frame.getY());
但是这些画面和显示屏之间有一些奇怪的填充物。对话框:
测试代码:
public class Test {
public static void main(String[] args) throws Exception {
JFrame mainFrame = new JFrame();
mainFrame.setSize(400, 400);
mainFrame.setVisible(true);
JFrame dialog = new JFrame(); // JDialog dialog = new JDialog();
dialog.setSize(400, 400);
dialog.setLocation(mainFrame.getX() + mainFrame.getWidth(), mainFrame.getY());
dialog.setVisible(true);
JFrame dialog1 = new JFrame(); // JDialog dialog1 = new JDialog();
dialog1.setSize(400, 400);
dialog1.setVisible(true);
dialog1.setLocation(mainFrame.getX(), mainFrame.getY() + mainFrame.getHeight());
}
}
任何人都可以解释为什么和建议解决方案,使这些更接近,没有任何填充?
答案 0 :(得分:2)
为什么不使用JFrame
来代替使用多个JPanel
?
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(Toolkit.getDefaultToolkit().getScreenSize());
frame.getContentPane().setLayout(new BorderLayout());
JPanel sidePanel = new JPanel(new BorderLayout());
JPanel buttonPanel = new JPanel(new GridLayout(0,3));
for(int i = 0; i < 6; i++) {
JButton button = new JButton("Button " + (i+1));
button.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
buttonPanel.add(button);
}
buttonPanel.setBorder(BorderFactory.createLineBorder(Color.gray));
JTextArea log = new JTextArea();
for(int i = 0; i < 50; i++) {
log.setText(log.getText() + "line " + (i+1) + "\n");
}
sidePanel.add(new JScrollPane(log), BorderLayout.CENTER);
sidePanel.add(buttonPanel, BorderLayout.NORTH);
JPanel browserPanel = new JPanel(new GridLayout());
// code for browser
frame.getContentPane().add(browserPanel, BorderLayout.CENTER);
frame.getContentPane().add(sidePanel, BorderLayout.WEST);
frame.setVisible(true);
这就是它最终看起来像:
答案 1 :(得分:0)
尝试使用框架上的getLocationOnScreen()
代替getX和getY