ave从jframe扩展类的问题

时间:2019-03-27 21:34:01

标签: java swing inheritance jframe

当我尝试从jframe创建扩展类时遇到问题。当我向创建的类中添加具有特定尺寸和位置的面板时,它将填充所有窗口。我的代码是:


package tuto;

import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class test extends JFrame{

    public test(){
        super();
        initComponents();
    }

    private void initComponents() {
        setBounds(0, 0, 1000, 618);
        panel = new JPanel();
        panel.setBounds(10, 10, 100, 100);       
        panel.setBackground(Color.blue);
        add(panel);
    }


    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new test().setVisible(true);
            }
        });
    }

    //Components
    JPanel panel;
}

执行代码后,所有窗口变为蓝色。请帮忙。

2 个答案:

答案 0 :(得分:0)

JFrame默认情况下使用BorderLayout,这就是为什么组件填充整个窗口的原因。有关更多详细信息,请参见How to Use BorderLayout

实际上,我还建议您通读Laying Out Components Within a Container,以更好地了解布局管理系统的方式。

您应注意,在大多数情况下,通常不建议使用“手动”放置组件,而应使用一个或多个布局管理器。

作为一般建议,您还应避免从诸如JFrame之类的顶级容器扩展,因为它将您视为单个用例,顶级容器往往很复杂,是复合组件,而您并不是通常向该类添加任何新功能。最好在需要时简单地创建它们,并用所需的组件填充它们。

答案 1 :(得分:0)

如果要使用绝对定位,则应将布局设置为null。

setLayout(null)

但是建议您看看不同的布局。一切都比空布局好。

例如https://docs.oracle.com/javase/tutorial/uiswing/layout/border.html