2016-03-03 98 views
0
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; 
} 
} 

因此,createHolder方法應該用JButtons和JTextFields創建JPanel。功能將在稍後添加。然而在這一點上,我不能讓任何真正出現在我的JFrame上的東西,除了單個帶有「Defender」字樣的JTextField出現在它上面。我不知道如何繼續。JPanels不會出現在我的JFrame上

回答

3

所以,基本上,你這樣做......

add(ptch, BorderLayout.CENTER); 
//... 
add(bnch); 

這是幾乎一樣的做這個...

add(ptch, BorderLayout.CENTER); 
//... 
add(bnch, BorderLayout.CENTER); 

或本...

//add(ptch, BorderLayout.CENTER); 
//... 
add(bnch, BorderLayout.CENTER); 
對於所有激烈的目的,可以使用

BorderLayout只會管理任何給定位置上的單個組件,這意味着實際上只有bnch被佈置。

不知道正是你想做什麼,就很難知道究竟是什麼建議,但你可以通過嘗試

add(ptch, BorderLayout.CENTER); 
//... 
add(bnch, BorderLayout.SOUTH); 

這應有助於啓動。

下一頁...

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; 
} 

這裏的問題是gh.add(gk, g);,第二個參數是典型佈局的約束屬性,相反,你應該做更多的東西一樣......

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; 
} 

而且幾乎適用於所有其他創建方法

您可能想花更多時間看看Laying Out Components Within a ContainerHow to Use BorderLayoutHow to Use GridLayout更多細節

你將有另一個問題是...

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); 
     dh.add(d); 
    } 
    return dh; 
} 

(我爲add法修正)組件只能駐留在單親家庭中,所以上面應該更像

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

,但是,當你調用這個方法,di0和您所做的任何di的變化不會影響用戶界面,除非你回想起這種方法,並用新面板更新界面

+0

對不起,我沒有提到這一點。實際上,我想爲每個按鈕和文本框分別創建一個面板,然後將它們添加到更大的Jpanels(goal,dfnc,midf,strk)等等。 – Nazrin

+0

@Nazrin這很好(實際上是一個相當好的主意),而且我提到的所有內容都會幫助你實現這一目標 – MadProgrammer