Java Jpanel不会出现在我的JFrame上 public类扩展JFrame{ int-di; int-mi; int-si; 公众幻想(){ 片名(“梦幻足球”); setDefaultCloseOperation(关闭时退出); setLayout(新的BorderLayout()); 设置大小(700700); 可设置大小(假); 字符串[]位置={“4-4-2”、“4-3-3”、“3-5-2”、“5-3-2”、“3-4-3”、“4-5-1”}; JComboBox选择=新的JComboBox(位置); 添加(选择,BorderLayout.NORTH); select.addActionListener(新建ActionListener(){ @凌驾 已执行的公共无效操作(操作事件e){ select.getItemAt(select.getSelectedIndex()); Pattern p=Pattern.compile(“(\\d)\\-(\\d)\\-(\\d)”); Matcher m=p.Matcher(select.toString()); m、 查找(); di=整数.parseInt(m.group(1)); mi=Integer.parseInt(m.group(2)); si=Integer.parseInt(m.group(3)); } }); JPanel ptch=新的JPanel(); 添加(ptch,BorderLayout.CENTER); JPanel目标=新的JPanel(); setLayout(新的FlowLayout()); 添加(createGoalieHolder()); JPanel dfnc=新的JPanel(); setLayout(新的FlowLayout()); add(createDefenseHolder()); JPanel midf=新的JPanel(); setLayout(新的FlowLayout()); add(createMidfHolder()); JPanel strk=新的JPanel(); strk.setLayout(新的FlowLayout()); add(createStrkHolder()); JPanel bnch=新的JPanel(); bnch.setLayout(新的FlowLayout()); 添加(createBenchHolder()); ptch.add(目标); ptch.add(dfnc); ptch.add(midf); ptch.add(strk); 添加(bnch); setVisible(真); } 私有JPanel createGoalieHolder(){ JPanel gh=新JPanel(新网格布局(2,1)); JTextField gk=新的JTextField(“守门员”); JButton g=新JButton(“+”); g.添加(gk,g); 返回生长激素; } 私有JPanel CreateDefenseHolder(){ JPanel dh=新JPanel(新网格布局(2,1)); JTextField df=新的JTextField(“防御者”); JButton d=新JButton(“+”); 对于(int a=0;a

Java Jpanel不会出现在我的JFrame上 public类扩展JFrame{ int-di; int-mi; int-si; 公众幻想(){ 片名(“梦幻足球”); setDefaultCloseOperation(关闭时退出); setLayout(新的BorderLayout()); 设置大小(700700); 可设置大小(假); 字符串[]位置={“4-4-2”、“4-3-3”、“3-5-2”、“5-3-2”、“3-4-3”、“4-5-1”}; JComboBox选择=新的JComboBox(位置); 添加(选择,BorderLayout.NORTH); select.addActionListener(新建ActionListener(){ @凌驾 已执行的公共无效操作(操作事件e){ select.getItemAt(select.getSelectedIndex()); Pattern p=Pattern.compile(“(\\d)\\-(\\d)\\-(\\d)”); Matcher m=p.Matcher(select.toString()); m、 查找(); di=整数.parseInt(m.group(1)); mi=Integer.parseInt(m.group(2)); si=Integer.parseInt(m.group(3)); } }); JPanel ptch=新的JPanel(); 添加(ptch,BorderLayout.CENTER); JPanel目标=新的JPanel(); setLayout(新的FlowLayout()); 添加(createGoalieHolder()); JPanel dfnc=新的JPanel(); setLayout(新的FlowLayout()); add(createDefenseHolder()); JPanel midf=新的JPanel(); setLayout(新的FlowLayout()); add(createMidfHolder()); JPanel strk=新的JPanel(); strk.setLayout(新的FlowLayout()); add(createStrkHolder()); JPanel bnch=新的JPanel(); bnch.setLayout(新的FlowLayout()); 添加(createBenchHolder()); ptch.add(目标); ptch.add(dfnc); ptch.add(midf); ptch.add(strk); 添加(bnch); setVisible(真); } 私有JPanel createGoalieHolder(){ JPanel gh=新JPanel(新网格布局(2,1)); JTextField gk=新的JTextField(“守门员”); JButton g=新JButton(“+”); g.添加(gk,g); 返回生长激素; } 私有JPanel CreateDefenseHolder(){ JPanel dh=新JPanel(新网格布局(2,1)); JTextField df=新的JTextField(“防御者”); JButton d=新JButton(“+”); 对于(int a=0;a,java,swing,Java,Swing,因此,createHolder方法应该使用JButtons和JTextFields创建jpanel。稍后将添加功能。然而,在这一点上,我不能让任何东西真正出现在我的JFrame上,除了一个带有单词“Defender”的JTextField。我不知道还有什么办法继续进行。所以,基本上,你是这样做的 public class Fantasy extends JFrame { int di; int mi; int si; public Fantasy() { setTitle("Fanta

因此,createHolder方法应该使用JButtons和JTextFields创建jpanel。稍后将添加功能。然而,在这一点上,我不能让任何东西真正出现在我的JFrame上,除了一个带有单词“Defender”的JTextField。我不知道还有什么办法继续进行。

所以,基本上,你是这样做的

public class Fantasy extends JFrame {
int di;
int mi;
int si;

public Fantasy() {
    setTitle("Fantasy Football");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLayout(new BorderLayout());
    setSize(700,700);
    setResizable(false);

    String[] positions = {"4-4-2", "4-3-3", "3-5-2", "5-3-2", "3-4-3", "4-5-1"};

    JComboBox select = new JComboBox(positions);
    add(select, BorderLayout.NORTH);
    select.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            select.getItemAt(select.getSelectedIndex());
            Pattern p = Pattern.compile("(\\d)\\-(\\d)\\-(\\d)");
            Matcher m = p.matcher(select.toString());
            m.find();
            di = Integer.parseInt(m.group(1));
            mi = Integer.parseInt(m.group(2));
            si = Integer.parseInt(m.group(3));
        }
    });

    JPanel ptch = new JPanel();
    add(ptch, BorderLayout.CENTER);

    JPanel goal = new JPanel();
    goal.setLayout(new FlowLayout());
    goal.add(createGoalieHolder());

    JPanel dfnc = new JPanel();
    dfnc.setLayout(new FlowLayout());
    dfnc.add(createDefenceHolder());

    JPanel midf = new JPanel();
    midf.setLayout(new FlowLayout());
    midf.add(createMidfHolder());

    JPanel strk = new JPanel();
    strk.setLayout(new FlowLayout());
    strk.add(createStrkHolder());

    JPanel bnch = new JPanel();
    bnch.setLayout(new FlowLayout());
    bnch.add(createBenchHolder());

    ptch.add(goal);
    ptch.add(dfnc);
    ptch.add(midf);
    ptch.add(strk);
    add(bnch);
    setVisible(true);
}

private JPanel createGoalieHolder() {
    JPanel gh = new JPanel(new GridLayout(2,1));
    JTextField gk = new JTextField("Goalkeeper");
    JButton g = new JButton("+");
    gh.add(gk,g);
    return gh;
}

private JPanel createDefenceHolder() {
    JPanel dh = new JPanel(new GridLayout(2, 1));
    JTextField df = new JTextField("Defender");
    JButton d = new JButton("+");
    for (int a = 0; a < di; a++) {
        dh.add(df,d);
    }
    return dh;
}

private JPanel createMidfHolder() {
    JPanel mh = new JPanel(new GridLayout(2, 1));
    JTextField md = new JTextField("Midfielder");
    JButton m = new JButton("+");
    for (int b = 0; b < mi; b++) {
        mh.add(md,m);
    }
    return mh;
}


private JPanel createStrkHolder() {
    JPanel sh = new JPanel(new GridLayout(2, 1));
    JTextField sk = new JTextField("Striker");
    JButton s = new JButton("+");
    for (int c = 0; c < si; c++) {
        sh.add(sk,s);
    }
    return sh;
}

private JPanel createBenchHolder() {
        JPanel gkh = new JPanel(new GridLayout(2,1));
        JTextField gkt = new JTextField("Goalkeeper");
        JButton gkb = new JButton("+");
        gkh.add(gkt,gkb);

    for(int ad = 0; ad < (5-di); ad++) {
        JPanel dfh = new JPanel(new GridLayout(2,1));
        JTextField dft = new JTextField("Defender");
        JButton dfb = new JButton("+");
        dfh.add(dft,dfb);
        return dfh;
    }

    for(int bd = 0; bd < (5-mi); bd++) {
        JPanel mfh = new JPanel(new GridLayout(2,1));
        JTextField mft = new JTextField("Midfielder");
        JButton mfb = new JButton("+");
        mfh.add(mft,mfb);
        return mfh;
    }

    for(int cd = 0; cd < (3-si); cd++) {
        JPanel sih = new JPanel(new GridLayout(2,1));
        JTextField sit = new JTextField("Striker");
        JButton sib = new JButton("+");
        sih.add(sit,sib);
        return sih;
    }
    return gkh;
}
}
这和做这个差不多

add(ptch, BorderLayout.CENTER);
//...
add(bnch);
或者这个

add(ptch, BorderLayout.CENTER);
//...
add(bnch, BorderLayout.CENTER);
为了所有的目的

BorderLayout
将仅在任何给定位置管理单个组件,这意味着只有
bnch
实际布局

如果你不知道自己到底想做什么,你很难知道该建议什么,但你可以从尝试开始

//add(ptch, BorderLayout.CENTER);
//...
add(bnch, BorderLayout.CENTER);
这应该会有帮助

接下来

add(ptch, BorderLayout.CENTER);
//...
add(bnch, BorderLayout.SOUTH);
这里的问题是
gh.add(gk,g),第二个参数通常是布局的constraint属性,相反,您应该执行类似于

private JPanel createGoalieHolder() {
    JPanel gh = new JPanel(new GridLayout(2, 1));
    JTextField gk = new JTextField("Goalkeeper");
    JButton g = new JButton("+");
    gh.add(gk, g);
    return gh;
}
这几乎适用于所有其他的create方法

你可能想花更多的时间看一看,了解更多的细节

你会遇到的另一个问题是

private JPanel createGoalieHolder() {
    JPanel gh = new JPanel(new GridLayout(2, 1));
    JTextField gk = new JTextField("Goalkeeper");
    JButton g = new JButton("+");
    gh.add(gk);
    gh.add(g); 
    return gh;
}

但是,当您调用此方法时,
di
0
,您对
di
所做的任何更改都不会影响UI,除非您调用此方法并使用新面板更新UI

,因此,基本上,您可以这样做

public class Fantasy extends JFrame {
int di;
int mi;
int si;

public Fantasy() {
    setTitle("Fantasy Football");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLayout(new BorderLayout());
    setSize(700,700);
    setResizable(false);

    String[] positions = {"4-4-2", "4-3-3", "3-5-2", "5-3-2", "3-4-3", "4-5-1"};

    JComboBox select = new JComboBox(positions);
    add(select, BorderLayout.NORTH);
    select.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            select.getItemAt(select.getSelectedIndex());
            Pattern p = Pattern.compile("(\\d)\\-(\\d)\\-(\\d)");
            Matcher m = p.matcher(select.toString());
            m.find();
            di = Integer.parseInt(m.group(1));
            mi = Integer.parseInt(m.group(2));
            si = Integer.parseInt(m.group(3));
        }
    });

    JPanel ptch = new JPanel();
    add(ptch, BorderLayout.CENTER);

    JPanel goal = new JPanel();
    goal.setLayout(new FlowLayout());
    goal.add(createGoalieHolder());

    JPanel dfnc = new JPanel();
    dfnc.setLayout(new FlowLayout());
    dfnc.add(createDefenceHolder());

    JPanel midf = new JPanel();
    midf.setLayout(new FlowLayout());
    midf.add(createMidfHolder());

    JPanel strk = new JPanel();
    strk.setLayout(new FlowLayout());
    strk.add(createStrkHolder());

    JPanel bnch = new JPanel();
    bnch.setLayout(new FlowLayout());
    bnch.add(createBenchHolder());

    ptch.add(goal);
    ptch.add(dfnc);
    ptch.add(midf);
    ptch.add(strk);
    add(bnch);
    setVisible(true);
}

private JPanel createGoalieHolder() {
    JPanel gh = new JPanel(new GridLayout(2,1));
    JTextField gk = new JTextField("Goalkeeper");
    JButton g = new JButton("+");
    gh.add(gk,g);
    return gh;
}

private JPanel createDefenceHolder() {
    JPanel dh = new JPanel(new GridLayout(2, 1));
    JTextField df = new JTextField("Defender");
    JButton d = new JButton("+");
    for (int a = 0; a < di; a++) {
        dh.add(df,d);
    }
    return dh;
}

private JPanel createMidfHolder() {
    JPanel mh = new JPanel(new GridLayout(2, 1));
    JTextField md = new JTextField("Midfielder");
    JButton m = new JButton("+");
    for (int b = 0; b < mi; b++) {
        mh.add(md,m);
    }
    return mh;
}


private JPanel createStrkHolder() {
    JPanel sh = new JPanel(new GridLayout(2, 1));
    JTextField sk = new JTextField("Striker");
    JButton s = new JButton("+");
    for (int c = 0; c < si; c++) {
        sh.add(sk,s);
    }
    return sh;
}

private JPanel createBenchHolder() {
        JPanel gkh = new JPanel(new GridLayout(2,1));
        JTextField gkt = new JTextField("Goalkeeper");
        JButton gkb = new JButton("+");
        gkh.add(gkt,gkb);

    for(int ad = 0; ad < (5-di); ad++) {
        JPanel dfh = new JPanel(new GridLayout(2,1));
        JTextField dft = new JTextField("Defender");
        JButton dfb = new JButton("+");
        dfh.add(dft,dfb);
        return dfh;
    }

    for(int bd = 0; bd < (5-mi); bd++) {
        JPanel mfh = new JPanel(new GridLayout(2,1));
        JTextField mft = new JTextField("Midfielder");
        JButton mfb = new JButton("+");
        mfh.add(mft,mfb);
        return mfh;
    }

    for(int cd = 0; cd < (3-si); cd++) {
        JPanel sih = new JPanel(new GridLayout(2,1));
        JTextField sit = new JTextField("Striker");
        JButton sib = new JButton("+");
        sih.add(sit,sib);
        return sih;
    }
    return gkh;
}
}
这和做这个差不多

add(ptch, BorderLayout.CENTER);
//...
add(bnch);
或者这个

add(ptch, BorderLayout.CENTER);
//...
add(bnch, BorderLayout.CENTER);
为了所有的目的

BorderLayout
将仅在任何给定位置管理单个组件,这意味着只有
bnch
实际布局

如果你不知道自己到底想做什么,你很难知道该建议什么,但你可以从尝试开始

//add(ptch, BorderLayout.CENTER);
//...
add(bnch, BorderLayout.CENTER);
这应该会有帮助

接下来

add(ptch, BorderLayout.CENTER);
//...
add(bnch, BorderLayout.SOUTH);
这里的问题是
gh.add(gk,g),第二个参数通常是布局的constraint属性,相反,您应该执行类似于

private JPanel createGoalieHolder() {
    JPanel gh = new JPanel(new GridLayout(2, 1));
    JTextField gk = new JTextField("Goalkeeper");
    JButton g = new JButton("+");
    gh.add(gk, g);
    return gh;
}
这几乎适用于所有其他的create方法

你可能想花更多的时间看一看,了解更多的细节

你会遇到的另一个问题是

private JPanel createGoalieHolder() {
    JPanel gh = new JPanel(new GridLayout(2, 1));
    JTextField gk = new JTextField("Goalkeeper");
    JButton g = new JButton("+");
    gh.add(gk);
    gh.add(g); 
    return gh;
}
但是,当您调用此方法时,
di
0
,您对
di
所做的任何更改都不会影响UI,除非您调用此方法并更新U