自定义JFrame类未出现

时间:2018-10-16 21:09:02

标签: java swing jframe jpanel awt

这可以正常编译,但是执行代码时看不到任何内容。我需要更改什么?

我已经删除了我的Swing / AWT导入,所以我可以发布问题。代码很短,我的问题也很短,但显然不够好...

class Exercise1 {
    public static void main(String[] args) {
        new MyFrame("Test");
    }
}

class MyFrame extends JFrame{
    public MyFrame(String title){
        super(title);
        int i = 2;
        int j = 2;
        JPanel[][] panelHolder = new JPanel[i][j];    
        setLayout(new GridLayout(i,j));
        for(int m = 0; m < i; m++) {
            for(int n = 0; n < j; n++) {
                panelHolder[m][n] = new JPanel();
                add(panelHolder[m][n]);
            }
        }
        JTextField t1 = new JTextField();
        JTextField t2 = new JTextField();
        JTextField t3 = new JTextField();
        panelHolder[2][0].add(t1);
        panelHolder[2][1].add(t2);
        panelHolder[2][2].add(t3);
        setVisible(true);
    }
}

1 个答案:

答案 0 :(得分:1)

  

这可以正常编译,但是执行代码时看不到任何东西。

因为您获得了运行时异常。

数组索引基于0。

public class MapFragment extends SupportMapFragment implements OnMapReadyCallback {
...
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
        }

        rxLocation = new RxLocation(Objects.requireNonNull(this.getActivity()));
        rxPermissions = new RxPermissions(this);
        rxPermissions.setLogging(true);
        mCtx = this.getActivity();
    }

您创建了一个2D数组,在每2行中每个空间都有2个值。

    int i = 2;
    int j = 2;
    JPanel[][] panelHolder = new JPanel[i][j];   

但是您尝试将组件添加到第三行/值,这会导致异常。

将数组大小更改为3,或仅使用索引0和1。

此外,当您创建JTextField时,请使用:

    panelHolder[2][0].add(t1);
    panelHolder[2][1].add(t2);
    panelHolder[2][2].add(t3);

因此文本字段的大小合理。