2012-10-24 11 views
9

Próbuję utworzyć program, który pozwala użytkownikowi kliknąć przycisk, aby umieścić coś w JPanel i pozwolić mu na przeniesienie tego elementu. Znalazłem już dobry układ, który pozwoli na przenoszenie komponentów (patrz link: this). Jednak jestem po prostu ciekawy najlepszy sposób na stworzenie takiego układu? Mam nadzieję, że coś takiego:Używanie dwóch JPanels w jednym JFrame

layout idea

W jaki sposób można to osiągnąć? Czy chciałbym użyć dwóch JPanel lub czegoś innego?

+0

Co to za przedmiot? –

Odpowiedz

11

Główny panel (lub okienko zawartości okna) musiałby mieć BorderLayout jako menedżera układu.

Następnie panel przycisków zostanie dodany do BorderLayout.WEST, a panel przeciągania do BorderLayout.CENTER.

Istnieje Visual Guide dla menedżerów układu obrotu.

6

spróbuje użyć JSplitPane:

enter image description here

Oto przykładowy kod:

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

Możesz grać z splitPaneH.setOneTouchExpandable true/false

Można confugure lokalizację dzielnik zarówno podobne:

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

co to jest "spane" w 'spane.setDividerLocation ((szerokość * 3)/4);' ??? Nie występuje w całym kodzie. +1 za miłą odpowiedź btw. –

Powiązane problemy