2012-10-24 30 views
9

Tôi đang cố tạo chương trình cho phép người dùng nhấp vào nút để đặt thứ gì đó trong số JPanel và cho phép họ di chuyển mục này. Tôi đã tìm thấy bố cục tốt để sử dụng để cho phép các thành phần chuyển động (xem liên kết this). Tuy nhiên, tôi chỉ tò mò cách tốt nhất để tạo bố cục như thế này? Hy vọng của tôi là phải có một cái gì đó như thế này:Sử dụng hai JPanels trong một JFrame

layout idea

Làm thế nào tôi có thể thực hiện điều này? Tôi có muốn sử dụng hai số JPanel hoặc cái gì khác không?

+0

Điều gì sẽ di chuyển mục xung quanh? –

Trả lời

11

Bảng điều khiển chính (hoặc khung nội dung cửa sổ) sẽ phải có BorderLayout làm trình quản lý bố cục.

Sau đó, bảng điều khiển nút sẽ được thêm vào BorderLayout.WEST và bảng kéo tới BorderLayout.CENTER.

Visual Guide để xoay trình quản lý bố cục.

6

Cố gắng sử dụng JSplitPane:

enter image description here

Dưới đây là một ví dụ mã:

class SplitPane extends JFrame { 

private  JSplitPane splitPaneV; 
private  JSplitPane splitPaneH; 
private  JPanel  panel1; 
private  JPanel  panel2; 
private  JPanel  panel3; 


public SplitPane(){ 
    setTitle("Split Pane Application"); 
    setBackground(Color.gray); 

    JPanel topPanel = new JPanel(); 
    topPanel.setLayout(new BorderLayout()); 
    getContentPane().add(topPanel); 

    // Create the panels 
    createPanel1(); 
    createPanel2(); 
    createPanel3(); 

    // Create a splitter pane 
    splitPaneV = new JSplitPane(JSplitPane.VERTICAL_SPLIT); 
    topPanel.add(splitPaneV, BorderLayout.CENTER); 

    splitPaneH = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); 
    splitPaneH.setLeftComponent(panel1); 
    splitPaneH.setRightComponent(panel2); 

    splitPaneV.setLeftComponent(splitPaneH); 
    splitPaneV.setRightComponent(panel3); 
} 

public void createPanel1(){ 
    panel1 = new JPanel(); 
    panel1.setLayout(new BorderLayout()); 

    // Add some buttons 
    panel1.add(new JButton("North"), BorderLayout.NORTH); 
    panel1.add(new JButton("South"), BorderLayout.SOUTH); 
    panel1.add(new JButton("East"), BorderLayout.EAST); 
    panel1.add(new JButton("West"), BorderLayout.WEST); 
    panel1.add(new JButton("Center"), BorderLayout.CENTER); 

} 

public void createPanel2(){ 
    panel2 = new JPanel(); 
    panel2.setLayout(new FlowLayout()); 

    panel2.add(new JButton("Button 1")); 
    panel2.add(new JButton("Button 2")); 
    panel2.add(new JButton("Button 3")); 
} 

public void createPanel3(){ 
    panel3 = new JPanel(); 
    panel3.setLayout(new BorderLayout()); 
    panel3.setPreferredSize(new Dimension(400, 100)); 
    panel3.setMinimumSize(new Dimension(100, 50)); 

    panel3.add(new JLabel("Notes:"), BorderLayout.NORTH); 
    panel3.add(new JTextArea(), BorderLayout.CENTER); 
} 

public static void main(String args[]){ 
    try { 
     UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
    } catch (Exception evt) {} 
    // Create an instance of the test application 
    SplitPane mainFrame = new SplitPane(); 
    mainFrame.pack(); 
    mainFrame.setVisible(true); 
} 
} 

Bạn có thể chơi với splitPaneH.setOneTouchExpandable đúng/sai

Bạn có thể confugure vị trí chia cho cả hai như:

Toolkit tk = Toolkit.getDefaultToolkit(); 
    Dimension d = tk.getScreenSize(); 
    int width = d.width; 
    int height = d.height; 

    spane.setDividerLocation((width*3)/4); 
    spanex.setDividerLocation(width/4); 
+0

'spane' trong' spane.setDividerLocation ((width * 3)/4); '??? Nó không có trong toàn bộ mã. 1 cho câu trả lời tốt đẹp btw. –

Các vấn đề liên quan