![](/img/trans.png)
[英]Why can't I use the setLayout method from the class Frame with a BorderLayout?
[英]Why can setLayout() be called without specifying a class or object in Java?
这是来自Java 声音演示的 MidiSynth class 的开始。 我的印象是 Java 中的方法总是从 object 或 class 调用。 setLayout() 方法从何而来?
public class MidiSynth extends JPanel implements ControlContext {
// Fields omitted
public MidiSynth() {
setLayout(new BorderLayout());
JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
EmptyBorder eb = new EmptyBorder(5,5,5,5);
BevelBorder bb = new BevelBorder(BevelBorder.LOWERED);
CompoundBorder cb = new CompoundBorder(eb,bb);
p.setBorder(new CompoundBorder(cb,eb));
JPanel pp = new JPanel(new BorderLayout());
pp.setBorder(new EmptyBorder(10,20,10,5));
pp.add(piano = new Piano());
p.add(pp);
p.add(controls = new Controls());
p.add(new InstrumentsTable());
add(p);
}
MidiSynth extends JPanel
所以setLayout
调用实际上是在调用this.setLayout
此外, setLayout()
定义在java.awt.Container
实际上,因为您的 class MidiSynth
继承了JPanel
,这意味着您可以像处理MidiSynth
class 的本地方法一样处理 JPanel 的所有方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.