2016-08-24 239 views
-1

我有一个主要的JFrame(1),在那之后我想提出一个JDialog(2)以下(同一左边框位置)的JDialog位置:摇摆的JFrame,用奇怪的填充

dialog2.setLocation(帧.getX(),frame.getY()+ frame.getHeight());

,并把另一个的JDialog(3)右旁(相同的上边框位置):

dialog3.setLocation(frame.getX()+ frame.getWidth(),frame.getY( ));

但显示了这些框架&对话框中一些奇怪的填充:

enter image description here

测试代码:

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()); 
    } 
} 

任何人能解释为什么和建议的解决方案,使那些更接近没有任何填充?

+2

请发表您的[MCVE] –

+1

请重新设计你的用户界面...使用多个JFrames是不是很方便,而不是尝试使用布局来实现这种效果。 – nyxaria

回答

0

尝试使用框架代替的getX和

的getY
+0

我试过了,并没有工作 – yelliver

+0

你能举一个例子 – user489041

+0

我刚更新一个例子 – yelliver

2

getLocationOnScreen()无需使用多种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); 

这是它结束了看起来像:

cat

+0

(1-)使用正确的add(...)方法。自JDK 1.1以来,add(String,Component)方法已过时十多年。 – camickr

+0

这是我非常简单的例子,但是如果你创建一个包含许多表单的程序,你不能将它们全部填入唯一的主表单 – yelliver

+0

@yelliver总是有一种布局方式..如果确实是那么复杂, up GridBagLayout – nyxaria