日期:2014-05-20  浏览次数:20783 次

一个JPanel可以镶嵌到另一个JPanel中的吗?
新手学java,照书上做了个例子,发现面板上的内容不能显示,猜可能是JPanel里不能镶嵌另一个JPanel造成的,所以问一下。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Test implements ActionListener
{
JFrame f;//主要的框架
JPanel da;//用来分层
JPanel g1;//上方的面板
JScrollPane g2;//下面有滚动条的面板
JLabel b1;//四个标签
JLabel b2;
JLabel b3;
JLabel b4;
JTextField text;//用来输入名字的文本框
JPanel bu;//用来放两个单选框
JRadioButton button1;//两个单选框
JRadioButton button2;
JPanel bo;//用来放三个复选框
JCheckBox box1;//三个复选框
JCheckBox box2;
JCheckBox box3;
JComboBox xia;//一个下拉框
String a[];
JButton ok;//确定按钮
JTextArea o;
public Test()
{
//实现声明
JFrame f=new JFrame("试一下看怎么样");
JPanel g1=new JPanel();
JScrollPane g2=new JScrollPane();
JLabel b1=new JLabel("姓名:");
JLabel b2=new JLabel("性别:");
JLabel b3=new JLabel("爱好:");
JLabel b4=new JLabel("籍贯");
JTextField text=new JTextField();
JPanel bu=new JPanel();
JRadioButton button1=new JRadioButton("男");
JRadioButton button2=new JRadioButton("女");
bu.add(button1);
bu.add(button2);
JPanel bo=new JPanel();
JCheckBox box1=new JCheckBox("体育");
JCheckBox box2=new JCheckBox("音乐");
JCheckBox box3=new JCheckBox("美术");
bo.add(box1);
bo.add(box2);
bo.add(box3);
String a[]={"ok?","0000"};
JComboBox xia=new JComboBox(a);
g1.setLayout(new GridLayout(4,2));
g1.add(b1);
g1.add(text);
g1.add(b2);
g1.add(bu);
g1.add(b3);
g1.add(bo);
g1.add(b4);
g1.add(xia);
JTextArea o=new JTextArea();
g2.add(o);
JButton ok=new JButton("确定");
g2.add(ok);
JPanel da=new JPanel();
da.setLayout(new GridLayout(3,1));
da.add(g2);
ok.addActionListener(this);
//设标题框架
f.add(da);
f.setLocation(500,500);
f.setSize(600,600);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[])
{
Test r=new Test();
}
public void actionPerformed(ActionEvent e)
{
System.out.println(text.getText());
}
}

------解决方案--------------------
JPanel是可以镶嵌到另一个JPanel里面去的,下面是我改的代码
Java code

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

public class Test implements ActionListener
{
    JFrame f;//主要的框架
    JPanel da;//用来分层
    JPanel g1;//上方的面板
    JScrollPane g2;//下面有滚动条的面板
    JLabel b1;//四个标签
    JLabel b2;
    JLabel b3;
    JLabel b4;
    JTextField text;//用来输入名字的文本框
    JPanel bu;//用来放两个单选框
    JRadioButton button1;//两个单选框
    JRadioButton button2;
    JPanel bo;//用来放三个复选框
    JCheckBox box1;//三个复选框
    JCheckBox box2;
    JCheckBox box3;
    JComboBox xia;//一个下拉框
    String a[];
    JButton ok;//确定按钮
    JTextArea o;
    
    public Test()
    {
        //实现声明
        JFrame f=new JFrame("试一下看怎么样");
        JPanel g1=new JPanel();
        JScrollPane g2=new JScrollPane();
        JLabel b1=new JLabel("姓名:");
        JLabel b2=new JLabel("性别:");
        JLabel b3=new JLabel("爱好:");
        JLabel b4=new JLabel("籍贯");
        JTextField text=new JTextField();
        JPanel bu=new JPanel();
        JRadioButton button1=new JRadioButton("男");
        JRadioButton button2=new JRadioButton("女");
        bu.add(button1);
        bu.add(button2);
        JPanel bo=new JPanel();
        JCheckBox box1=new JCheckBox("体育");
        JCheckBox box2=new JCheckBox("音乐");
        JCheckBox box3=new JCheckBox("美术");
        bo.add(box1);
        bo.add(box2);
        bo.add(box3);
        String a[]={"ok?","0000"};
        JComboBox xia=new JComboBox(a);
        g1.setLayout(new GridLayout(4,2));
        g1.add(b1);
        g1.add(text);
        g1.add(b2);
        g1.add(bu);
        g1.add(b3);
        g1.add(bo);
        g1.add(b4);
        g1.add(xia);
        JTextArea o=new JTextArea();
        g2.add(o);
        JButton ok=new JButton("确定");
        //g2.add(ok);    
        JPanel da=new JPanel();
        da.setLayout(new GridLayout(3,1));
        da.add(g1);
        da.add(g2);
        da.add(ok);
        ok.addActionListener(this);
        //设标题框架
        f.add(da);
        f.setLocation(500,500);
        f.setSize(600,600);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    public static void main(String args[])
    {
        Test r=new Test();
    }
    
    public void actionPerformed(ActionEvent e)
    {
        System.out.println(text.getText());
    }
}