麻烦大神帮忙看看下面这两个代码的区别在哪里?

import java.awt.*;
import javax.swing.*;
public class Example1 extends JFrame {
private static final long serialVersionUID = 1L;
// 定义一个类继承JFrame类
public void CreateJFrame(String title) { // 定义一个CreateJFrame()方法
JFrame jf = new JFrame(title); // 实例化一个JFrame对象
代码1 Container container = jf.getContentPane(); // 获取一个容器
JLabel jl = new JLabel("这是一个JFrame窗体"); // 创建一个JLabel标签
// 使标签上的文字居中
jl.setHorizontalAlignment(SwingConstants.CENTER);
container.add(jl); // 将标签添加到容器中
container.setBackground(Color.white);//设置容器的背景颜色
jf.setVisible(true); // 使窗体可视
jf.setSize(200, 150); // 设置窗体大小
// 设置窗体关闭方式
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

public static void main(String args[]){//在主方法中调用createJFrame()方法
new Example1().CreateJFrame("创建一个JFrame窗体");
}
}
代码2

import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class GridLayoutPosition extends JFrame{
public static final long serialVersionUID = 1L;
public GridLayoutPosition(){
Container cont =getContentPane(); //获得容器
setLayout(new GridLayout(2,1,5,5));
for(int i=0;i<4;i++){
cont.add(new JButton("button"+i));
}
setTitle("你好");
setSize(300,300);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new GridLayoutPosition();
// TODO 自动生成的方法存根
}
}

我想知道为什么第一个要用jf.setSize()和jf.setVisible而第二个代码直接用setSize和setVisible。希望大神给我讲讲。我刚学,谢谢了

慕工程0101907
浏览 149回答 2
2回答

慕哥6287543

第一个代码js是JFrame jf = new JFrame(title)这语句实例化的JFrame对象。所以 jf.setSize(),是设置jf这个对象。第二个代码的JFrame对象是GridLayoutPosition类继承Jframe来的。在GridLayoutPosition实例化后就是一个JFrame。所以GridLayoutPosition类在自己类里设置自己用this.setSize()和this.setVisible(),把this关键字省略掉就变成了直接用setSize()和setVisible()设置了

慕仙森

因为第二种方法省略了主语,但是这个主语是全局上下文this,就是这个继承了JFrame的类,所以就是这样
打开App,查看更多内容
随时随地看视频慕课网APP