黑马程序员技术交流社区

标题: 下列代码为什么没有在JFrame窗体中显示标签?? [打印本页]

作者: 张海涛    时间: 2013-1-16 01:57
标题: 下列代码为什么没有在JFrame窗体中显示标签??
class MyJDialog extends JDialog { // 创建新类继承JDialog类
    public MyJDialog(MyFrame frame) {
        // 实例化一个JDialog类对象,指定对话框的父窗体、窗体标题和类型
        super(frame,"第一个JDialog窗体", true);
        Container container = getContentPane(); // 创建一个容器
        container.add(new JLabel("这是一个对话框")); // 在容器中添加标签
        setBounds(120, 120, 100, 100); // 设置对话框窗体大小
    }
}

public class MyFrame extends JFrame { // 创建新类
    public static void main(String args[]) {
        new MyFrame(); // 实例化MyJDialog类对象
    }
   
    public MyFrame() {
        Container container = getContentPane(); // 创建一个容器
        setLayout(null);
        JLabel jl = new JLabel("这是一个JFrame窗体"); // 在窗体中设置标签
        // 将标签的文字置于标签中间位置
        jl.setHorizontalAlignment(SwingConstants.CENTER);
        container.add(jl);
        JButton bl = new JButton("弹出对话框"); // 定义一个按钮
        bl.setBounds(10, 10, 100, 21);
        bl.addActionListener(new ActionListener() { // 为按钮添加鼠标单击事件
                    public void actionPerformed(ActionEvent e) {
                        // 使MyJDialog窗体可见
            new MyJDialog(MyFrame.this).setVisible(true);
                    }
                });
        container.add(bl); // 将按钮添加到容器中
        
        container.add(bl);
        container.setBackground(Color.white);
        setSize(200, 200);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        setVisible(true);
    }
}
作者: 罗威    时间: 2013-1-16 16:38
哥们,你主要思考下MyFrame这个类中的这个代码
      Container container = getContentPane(); // 创建一个容器
      setLayout(null);//这个代码使你将容器的布局设置为NULL了,则你必须要设定容器中每个对象的大小和位置,也就是说你要分别将容器中的每个对象都用setBouns()方法设置一次,不然添加进容器的对象(组件)默认都为NULL,可以理解为setLayout(NULL)就相当于将容器中的每个对象都分别默认设置了setBounds(int x,int y,int width,int height);而其中的四个参数都为0;即setBounds(0,0,0,0);
而jl.setHorizontalAlignment(SwingConstants.CENTER)这句代码只起到一个设置对象的位置的作用,也就是说你只设置了setBounds(int x,int y,int width,int height)中的x和y的值,所以只需要在这句代码上一行或者下一行添加jl.setSize(200,100)就可以了;就可以显示出标签了!
其他代码都不变,你可以改变下 bl.setBounds(10, 10, 100, 21);中四个参数的值,你将21改成10试试看咯,希望我说的对你有帮助!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2