Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在尝试将多个JPanel添加到JFrame_Java_Swing_Jframe_Jpanel_Layout Manager - Fatal编程技术网

Java 正在尝试将多个JPanel添加到JFrame

Java 正在尝试将多个JPanel添加到JFrame,java,swing,jframe,jpanel,layout-manager,Java,Swing,Jframe,Jpanel,Layout Manager,我试图将这两个JPanel添加到JFrame,但是只显示了frame,没有添加任何内容。任何人都可以帮助我,我缺少什么来添加这些面板 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();

我试图将这两个
JPanel
添加到
JFrame
,但是只显示了frame,没有添加任何内容。任何人都可以帮助我,我缺少什么来添加这些面板

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

    }
}
import javax.swing.*;
导入java.awt.GridLayout;
公共类grid_Base扩展JFrame{
JFrame mainp=新JFrame();
JPanel p=新的JPanel();
JPanel p2=新的JPanel();
clickButtons按钮[]=新的clickButtons[100];
公共电网基础(){
超级战舰;
主设置尺寸(8001500);
mainp.setresizeable(真);
mainp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainp.setVisible(真);
p、 setLayout(新网格布局(10,10));
对于(int i=0;i<100;i++){
按钮[i]=新的点击按钮();
p、 添加(按钮[i]);
}
添加(p);
p2.设置布局(新网格布局(10,10));
对于(int i=0;i<100;i++){
按钮[i]=新的点击按钮();
p2.添加(按钮[i]);
}
主程序添加(p2);
}
}
  • 始终调用
    setVisible(true)上次,在您创建UI之后
  • JFrame
    使用
    BorderLayout
    作为默认布局,因此使用
    mainp.add(p)
    ,然后
    mainp.add(p2)
    将隐藏
    p
    ,因为只有
    p2
    将被布局
  • 不要从
    JFrame
    扩展(特别是因为您已经有了
    JFrame
    的实例字段),这只会让它更加混乱
  • 有一个通读,它将使人们更容易阅读您的代码和您阅读别人
  • 您的第二个循环正在覆盖第一个循环生成的内容,这意味着当您尝试从数组中查找按钮时,您将只能找到在第二个循环中创建的按钮,而不能找到第一个

  • 您可以对代码进行这些更改,以便查看面板。更改值​​符合你的要求

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

    mainp.getContentPane().setLayout(null)//避免使用
    null
    布局,像素完美的布局在现代ui设计中是一种错觉。影响零部件单个尺寸的因素太多,您无法控制。Swing的设计初衷是与布局管理器一起工作,丢弃这些布局管理器将导致无止境的问题,您将花费越来越多的时间来纠正这些问题。请查看以了解更多详细信息