尝试将多个JPanel添加到JFrame

时间:2014-10-27 04:47:51

标签: java swing jframe jpanel layout-manager

我正在尝试将这两个JPanel添加到JFrame,但是只有框架显示且没有添加任何内容。任何人都可以帮助我,我缺少什么来添加这些面板?

import javax.swing.*;
import java.awt.GridLayout;

public class grid_Base extends JFrame {

    JFrame mainp = new JFrame();
    JPanel p = new JPanel();
    JPanel p2 = new JPanel();
    clickButtons buttons[] = new clickButtons[100];

    public grid_Base() {

        super("Battleship");
        mainp.setSize(800, 1500);
        mainp.setResizable(true);
        mainp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainp.setVisible(true);

        p.setLayout(new GridLayout(10, 10));
        for (int i = 0; i < 100; i++) {
            buttons[i] = new clickButtons();
            p.add(buttons[i]);
        }
        mainp.add(p);

        p2.setLayout(new GridLayout(10, 10));
        for (int i = 0; i < 100; i++) {
            buttons[i] = new clickButtons();
            p2.add(buttons[i]);
        }
        mainp.add(p2);

    }
}

2 个答案:

答案 0 :(得分:2)

  1. 在创建用户界面
  2. 后,最后始终致电setVisible(true);
  3. JFrame使用BorderLayout作为默认布局,因此使用mainp.add(p)然后mainp.add(p2)将隐藏p,因为只有p2才会布局......
  4. 不要从JFrame延伸(特别是因为你已经有JFrame的实例字段),这只会让它更加混乱......
  5. 仔细阅读Code Conventions for the Java TM Programming Language,它会让人们更容易阅读您的代码并让您阅读其他人
  6. 你的第二个循环是覆盖第一个循环生成的内容,这意味着当你尝试从数组中找到一个按钮时,你只能找到在第二个循环中创建的按钮而不是第一个循环...

答案 1 :(得分:-1)

您可以对代码进行这些更改,以便查看面板。将值更改为您的要求。

    mainp.getContentPane().setLayout(null); //<=== New line
    p.setLayout(new GridLayout(10, 10));
    p.setBounds(10,10,390,1300); //<=== position of panel1
    p.setBorder(BorderFactory.createTitledBorder("Panel1")); // border
    mainp.add(p);
    ....
    p2.setLayout(new GridLayout(10, 10));
    p2.setBounds(400,10,380,1300); //<=== position of panel2
    p2.setBorder(BorderFactory.createTitledBorder("Panel2")); //border        
    mainp.add(p2);