简体   繁体   English

在一个JFrame中使用两个JPanel

[英]Using two JPanels in one JFrame

I'm attempting to create a program that allows the user to click a button to place something in the JPanel and allowing them to move this item around. 我正在尝试创建一个程序,允许用户单击按钮在JPanel放置一些内容并允许它们移动此项目。 I have already found a good layout to use to allow the moving components (see this link). 我已经找到了一个很好的布局来使用移动组件(见这个链接)。 However, I'm just curious the best way to create a layout like this? 但是,我只是好奇创建这样的布局的最佳方法? My hope is to have something like this: 我希望有这样的事情:

布局的想法

How can I accomplish this? 我怎么能做到这一点? Would I want to use two JPanel 's or something else? 我想要使​​用两个JPanel或其他东西吗?

The main panel (or the window content pane) would have to have a BorderLayout as the layout manager. 主面板(或窗口内容窗格)必须具有BorderLayout作为布局管理器。

Then, the buttons panel would be added to BorderLayout.WEST and the drag panel to BorderLayout.CENTER . 然后,按钮面板将添加到BorderLayout.WEST ,拖动面板将添加到BorderLayout.CENTER

There is a Visual Guide to swing layout managers. 有一个可视指南来摆动布局管理器。

Try to use JSplitPane : 尝试使用JSplitPane

在此输入图像描述

Here is a code example: 这是一个代码示例:

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

You can play with splitPaneH.setOneTouchExpandable true/false 您可以使用splitPaneH.setOneTouchExpandable true / false

You can confugure divider location for both like: 您可以为两者构建分隔符位置,例如:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM