java JPanel 显示问题
我做了一个窗口,窗口里有一个JPanel,是可以随意摆放位置的,而JPanel里的的几种组件,也是按照特定的位置摆放的,现在的问题是,如果只设置窗口的布局为null,那么...
我做了一个窗口,窗口里有一个JPanel,是可以随意摆放位置的,而JPanel里的的几种组件,也是按照特定的位置摆放的,现在的问题是,如果只设置窗口的布局为null,那么JPanel是可以随意摆放位置,但是JPanel里的组件却不能按照特定的位置摆放,而如果窗口和JPanel的布局都设为null,那就什么都显示不出来了,为什么呢,怎么改呢代码如下,效果图如图
import javax.swing.*;
import java.awt.*;
public class J extends JFrame{
JPanel p0 =new JPanel();
JPanel p1 =new JPanel();
JPanel p2 =new JPanel();
JPanel p3 =new JPanel();
JPanel p4 =new JPanel();
JLabel []l=new JLabel[4];
JPanel []b=new JPanel[4];
JLabel name=new JLabel("玩家");
ImageIcon g1=new ImageIcon("image/x2.png");//一张120*50的图
JLabel image=new JLabel(g1);
public J(){
this.setLayout(null);
this.add(p0);
p0.setBounds(150,150,120,170);
p0.setLayout(null);
p0.add(p1);
p0.add(p2);
p0.add(p3);
p0.add(p4);
p1.setBounds(150,150,120,20);
p1.add(name);
p2.setBounds(150,170,120,50);
p2.add(image);
p3.setBounds(150,220,120,20);
p4.setLayout(new GridLayout(4,1));
p4.setBounds(150,240,120,80);
for(int i=0;i<4;i++){
l[i]=new JLabel("aaaaaaaa");
b[i]=new JPanel();
b[i].setBackground(Color.red);
p3.add(b[i]);
p4.add(l[i]);
}
this.setSize(400,400);
this.setVisible(true);
}
public static void main(String args[]){
new J();
}
} 展开
import javax.swing.*;
import java.awt.*;
public class J extends JFrame{
JPanel p0 =new JPanel();
JPanel p1 =new JPanel();
JPanel p2 =new JPanel();
JPanel p3 =new JPanel();
JPanel p4 =new JPanel();
JLabel []l=new JLabel[4];
JPanel []b=new JPanel[4];
JLabel name=new JLabel("玩家");
ImageIcon g1=new ImageIcon("image/x2.png");//一张120*50的图
JLabel image=new JLabel(g1);
public J(){
this.setLayout(null);
this.add(p0);
p0.setBounds(150,150,120,170);
p0.setLayout(null);
p0.add(p1);
p0.add(p2);
p0.add(p3);
p0.add(p4);
p1.setBounds(150,150,120,20);
p1.add(name);
p2.setBounds(150,170,120,50);
p2.add(image);
p3.setBounds(150,220,120,20);
p4.setLayout(new GridLayout(4,1));
p4.setBounds(150,240,120,80);
for(int i=0;i<4;i++){
l[i]=new JLabel("aaaaaaaa");
b[i]=new JPanel();
b[i].setBackground(Color.red);
p3.add(b[i]);
p4.add(l[i]);
}
this.setSize(400,400);
this.setVisible(true);
}
public static void main(String args[]){
new J();
}
} 展开
2个回答
展开全部
在Java的GUI编程中,对于没有使用布局的容器(即布局为null的)其中的组件必须通过setSize设置其尺寸,setLocation设置其位置,当然也可以用setBounds同时进行设置。在你的代码中由于没有通过这些方法进行设置,导致一些组件的尺寸为0 X 0,自然是无法被看见的。
更多追问追答
追问
我的代码里,有5句 setBounds,已经设置好了那几个组件了,那为何还是不行呢
追答
你对5个JPanel setBounds 但是没有对JLabel setBounds,真正的内容都在JLabel上不是么?
对一个容器设置尺寸并不会导致其内容自动填充该组件(除非你用了布局管理器)
展开全部
这个问题是 你把JFrame布局设置为null 所以不显示p0 我改了一点点了。
import javax.swing.*;
import java.awt.*;
public class test extends JFrame{
//JPanel p0 =new JPanel();
Container p0=null; //step 1
JPanel p1 =new JPanel();
JPanel p2 =new JPanel();
JPanel p3 =new JPanel();
JPanel p4 =new JPanel();
JLabel []l=new JLabel[4];
JPanel []b=new JPanel[4];
JLabel name=new JLabel("玩家");
ImageIcon g1=new ImageIcon("image/x2.png");//一张120*50的图
JLabel image=new JLabel(g1);
public test(){
this.setLayout(null);
//this.add(p0);
p0 =this.getContentPane(); //step 2
p0.setBounds(150,150,120,170);
p0.setLayout(null);
p0.add(p1);
p0.add(p2);
p0.add(p3);
p0.add(p4);
p1.setBounds(150,150,120,20);
p1.add(name);
p2.setBounds(150,170,120,50);
p2.add(image);
p3.setBounds(150,220,120,20);
p4.setLayout(new GridLayout(4,1));
p4.setBounds(150,240,120,80);
for(int i=0;i<4;i++){
l[i]=new JLabel("aaaaaaaa");
b[i]=new JPanel();
b[i].setBackground(Color.red);
p3.add(b[i]);
p4.add(l[i]);
}
this.setSize(400,400);
this.setVisible(true);
}
public static void main(String args[]){
new test();
}
}
或者别的方法是
this.setLayout(null); 行删除就可以显示的 默认是Center布局的
然后补充一点吧。。右上角的关闭事件也加上去
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //或者数字3
import javax.swing.*;
import java.awt.*;
public class test extends JFrame{
//JPanel p0 =new JPanel();
Container p0=null; //step 1
JPanel p1 =new JPanel();
JPanel p2 =new JPanel();
JPanel p3 =new JPanel();
JPanel p4 =new JPanel();
JLabel []l=new JLabel[4];
JPanel []b=new JPanel[4];
JLabel name=new JLabel("玩家");
ImageIcon g1=new ImageIcon("image/x2.png");//一张120*50的图
JLabel image=new JLabel(g1);
public test(){
this.setLayout(null);
//this.add(p0);
p0 =this.getContentPane(); //step 2
p0.setBounds(150,150,120,170);
p0.setLayout(null);
p0.add(p1);
p0.add(p2);
p0.add(p3);
p0.add(p4);
p1.setBounds(150,150,120,20);
p1.add(name);
p2.setBounds(150,170,120,50);
p2.add(image);
p3.setBounds(150,220,120,20);
p4.setLayout(new GridLayout(4,1));
p4.setBounds(150,240,120,80);
for(int i=0;i<4;i++){
l[i]=new JLabel("aaaaaaaa");
b[i]=new JPanel();
b[i].setBackground(Color.red);
p3.add(b[i]);
p4.add(l[i]);
}
this.setSize(400,400);
this.setVisible(true);
}
public static void main(String args[]){
new test();
}
}
或者别的方法是
this.setLayout(null); 行删除就可以显示的 默认是Center布局的
然后补充一点吧。。右上角的关闭事件也加上去
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //或者数字3
更多追问追答
追问
我就是想让JPanel可以任意摆放才要得this.setLayout(null)的,然后按照你的代码的确是的,但是,p0 =this.getContentPane(); 这一句已经获取了窗口的跟面板,如果我有很多个p0这样的面板呢,也就是说我要显示多个p0面板,并按照我指定的大小位置呢,这样还得么
追答
你先掌握布局吧。。Swing的设计方法是 JFrame 上面捕获 Container 容器 不可能多个Container,Container的范围是整个画面的.Container 上面就随意放你想要的设计就行的 。或者在网上找个 swt 下载以后设计吧。。但不支持用这个开发的 你不用动脑的。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询