简体   繁体   English

如何在java中的边框布局中嵌入网格布局

[英]How to embed a grid layout inside a border layout in java

I have a border layout and I want to add a grid layout to the center section.我有一个边框布局,我想向中心部分添加一个网格布局。 However, I can't declare a grid and then add my center border.但是,我不能声明一个网格,然后添加我的中心边框。 How can I do this?我怎样才能做到这一点?

public Liability_Calculator(String s)
{
    super(s);
    setSize(325,200);
    
    c = getContentPane();
    c.setLayout(new BorderLayout());
    
    //the top label
    total = new JLabel("Total monthly liabilities ", JLabel.CENTER);
    c.add(total, BorderLayout.NORTH);
    
    
    //the grid
    GridLayout grid = new GridLayout(2,2);
    
    text_field1 = new JTextField(7);
    
    //I GET AN ERROR HERE!!!!!!!
    grid.add(text_field1);

    //AND ERROR HERE!!!!!!!!!!!!!
    c.add(grid, BorderLayout.CENTER);
    
    

    
    setVisible(true);
}

You're trying to add a component to a layout , and that simply cannot be done.您正在尝试将组件添加到layout ,而这根本无法完成。 Instead use a JPanel, give it a GridLayout, and then add the component to the JPanel (acting as the "container" here).而是使用 JPanel,给它一个 GridLayout,然后将组件添加到 JPanel(在这里充当“容器”)。

In general, you will want to nest JPanels with each using the best layout for the GUI, here the inner JPanel using GridLayout and the outer one using BorderLayout.通常,您会希望使用 GUI 的最佳布局将 JPanel 与每个 JPanel 嵌套在一起,这里使用 GridLayout 的内部 JPanel 和使用 BorderLayout 的外部 JPanel。 Then you simply add the inner JPanel to the outer one (here your contentPane) in the BorderLayout.CENTER position.然后,您只需将内部 JPanel 添加到 BorderLayout.CENTER 位置的外部 JPanel(这里是您的 contentPane)。

Providing code visualization derived from Hovercraft's answer:提供源自 Hovercraft 答案的代码可视化:

Display class:显示类:

public class Display extends JFrame     {

JPanel gridHolder = new JPanel(); // panel to store the grid
private GridLayout buttonsGrid; // space containing a buttons
private JButton myButtons[]; // grid is to be filled with these buttons
private BorderLayout mainGUILayout; // main gui layout
private Container mainGuiContainer;

public Display()     {
    mainGUILayout = new BorderLayout(5,5); // Border layout option
    mainGuiContainer = getContentPane(); // getting content pane
    mainGuiContainer.setLayout(mainFrameLayout); // setting main layout
    buttonsGrid = new GridLayout(4, 1, 5, 5); // 4 buttons one over the other
    myButtons = new JButton[4]; // player's hand represented with buttons
    gridHolder.setLayout(buttonsGrid);

                for (int x = 0; x < 4; x++)     {
                
                myButtons[x] = new JButton (" ");
                gridHolder.add(myButtons[x]);     }

            add(gridHolder, BorderLayout.WEST);
            setVisible(true);     }     }

MainGUILaunch class: MainGUILaunch 类:

public class MainGUILaunch     {
    public static void main (String args[])     {
        Display myApplication = new Display();
        myApplication.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myApplication.setSize(1024, 1024);
        myApplication.setVisible(true); // displaying application     }
} // End of MainGUILaunch

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

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