2016-08-24 189 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