我对使用JFrame
s
(来源1)
import javax.swing.*;
public class FirstSwingExample {
public static void main(String[] args) {
JFrame f = new JFrame();// creating instance of JFrame
JButton b = new JButton("click");// creating instance of JButton
b.setBounds(130, 100, 100, 40);// x axis, y axis, width, height
f.add(b);// adding button in JFrame
f.setSize(400, 500);// 400 width and 500 height
f.setLayout(null);// using no layout managers
f.setVisible(true);// making the frame visible
}
}
(来源2)
import javax.swing.JButton;
import javax.swing.JFrame;
class FrameTest extends JFrame {
public FrameTest() {
JButton b=new JButton("click");//create button
b.setBounds(130,100,100, 40);
add(b);//adding button on frame
setSize(400,500);
setLayout(null);
setVisible(true);
}
}
public class Appl {
public static void main(String[] args) {
new FrameTest();
}
}
我的问题是:
源代码1中的- .add,.setSize,.setLayout和.setVisible是' f'的实例方法。 那些方法初始化' f'。
的属性但是在source2中 - add,setSize,setLayout和setVisible是某个超类的方法。
在这个源代码中,没有任何JFrame实例。然而它只是没有问题。
我无法理解。我发现了Container.class和JFrame.class,Frame.class但是我找不到创建JFrame实例的部分。
答案 0 :(得分:4)
在这个源代码中,没有任何JFrame实例
这是不正确的假设。在第二个代码库中,当前实例this
原样是一个JFrame对象。您在致电new FrameTest()
时创建实例。由于FrameTest继承自JFrame,因此所有实例都将是JFrame的子代。
其他无关的问题:
setBounds()
可能看起来像创建复杂GUI的最简单和最好的方式,但是你创建的Swing GUI越多,使用它们时会遇到更严重的困难。当GUI调整大小时,它们不会调整组件的大小,它们是增强或维护的皇室女巫,当它们被放置在滚动窗格中时它们完全失败,当它们在所有平台上观看时或者与原始平台不同的屏幕分辨率时它们看起来很糟糕