2017-04-04 202 views
0

海蘭,我試圖像在這張圖片創建一個佈局的窗口: layoutJava的嵌套佈局

我的IDE是使用面板和佈局鳥巢這樣的事情: layout2

這裏是我的代碼到目前爲止,但它無法正常工作。我該怎麼做,我應該做什麼不同,甚至我的基本概念是錯誤的?

package layout; 

import java.awt.FlowLayout; 
import java.awt.GridLayout; 
import javax.swing.*; 
import models.People; 

public class DetailWindow extends JFrame{ 

public DetailWindow(People newPeople) { 
    JFrame frame = new JFrame("Detail Window"); 

    JPanel mainPanel = new JPanel(new GridLayout(1,2)); 
    frame.add(mainPanel); 

    JPanel leftPanel = new JPanel(new GridLayout(2,1)); 
    frame.add(leftPanel); 

    JPanel rightPanel = new JPanel(new GridLayout(3,1)); 
    frame.add(rightPanel); 

    JPanel pictureHolder = new JPanel(new FlowLayout()); 
    pictureHolder.add(new JLabel(new ImageIcon(newPeople.getPic()))); 
    leftPanel.add(pictureHolder); 

    JPanel infoHolder = new JPanel(new GridLayout(6,1)); 
    infoHolder.add(new JTextField(newPeople.getLb_name())); 
    infoHolder.add(new JTextField(newPeople.getName())); 
    infoHolder.add(new JTextField(newPeople.getLb_occup())); 
    infoHolder.add(new JTextField(newPeople.getOccup())); 
    infoHolder.add(new JTextField(newPeople.getLb_BD())); 
    infoHolder.add(new JTextField(newPeople.getBD())); 
    leftPanel.add(infoHolder); 


    rightPanel.add(new JTextField(newPeople.getName())); 
    rightPanel.add(new JTextField(newPeople.getOccup())); 
    rightPanel.add(new JTextField(newPeople.getDetail())); 

    frame.pack(); 
    frame.setSize(600, 400); 
    frame.setLocationRelativeTo(null); // Center the frame 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
    frame.show(); 
    } 
} 

(人們的是一個自定義類,並在主只需要調用DetailWindow構造函數)

感謝您的幫助提前!

回答

0

通過查看您的圖片,我將使用GridBagLayout,如here所述。

原因是GridBagLayout是使用多個面板時最簡單的佈局,它與基本矩陣相同的基礎上定位您的UI元素,完美地分隔它們,您可以使用間隔符,即在面板之間具有固定大小的空佈局。

另一方面,這裏有很多精彩的IDE,我更喜歡IntelliJ的想法,它有一個超級用戶界面的'發電機',並允許您按照自己想要的方式來準確地放置用戶界面。

祝你好運:)

0

如果在右側總是有兩個短文本和一個長文本,請使用BorderLayout作爲右側的面板。將大文本添加爲​​BorderLayout.CENTER,併爲頂部的兩個較短的文本創建一個面板(可以是GridLayout)。將此第二個面板添加爲BorderLayout.NORTH。

BorderLayout在中心放置了一個大組件,在邊緣放置了四個大組件。 GridLayout就像一張表格,它爲所有組件提供了相同的空間,這不是你想要實現的。

如果您需要垂直放置多個組件,每個組件都只佔用所需空間,則需要使用BoxLayout,如here