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