2014-06-26 67 views
0

我試圖添加兩個面板,其中每個都有自己的組件到另一個面板,但是當程序執行兩個面板只是彼此合併。請查看我的代碼。我的兩個面板連接在一起時添加到第三個面板

import javax.swing.*; 

import java.awt.*; 

/* 
* 2 Labels for withdraw/deposit. 
* 2 Textfields for entering withdrawal/deposit amount. 
* 1 Label for balance, 1 non-editable textfield for balance. 
* Event listener on the calculate button. 
* Action performed: balance minors withdrawal plus deposit 
*/ 

/** 
* This class manages the input numbers. User will input withdrawal/deposit amount 
* and the program will display the balacne after transfers. 
* @author Administrator 
* 
*/ 

public class DataPanel extends JPanel { 

public final int TEXTFIELD_LENGTH = 10; 
public final int LAYOUT_VGAP = 25; 
public final int LAYOUT_HGAP = 15; 


/** 
* Constructor sets layout, creates labels/fields. 
*/ 

public JPanel pane1 = new JPanel(); 
public JPanel pane2 = new JPanel(); 
public JPanel pane = new JPanel(new GridLayout(1,2)); 

    //Create necessary fields and labels 
    JLabel withdrawalLabel = new JLabel("Withdrawal: "); 
    JLabel depositLabel = new JLabel("deposit: "); 
    JTextField withdrawalText = new JTextField(TEXTFIELD_LENGTH); 
    JTextField depositText = new JTextField(TEXTFIELD_LENGTH); 

    JLabel balanceLabel = new JLabel("Balance: "); 
    JTextField balanceTextField = new JTextField(TEXTFIELD_LENGTH); 

    JLabel totalSavingLabel = new JLabel("Recently You Saved: "); 
    JTextField totalSavingTextField = new JTextField(TEXTFIELD_LENGTH); 

    JLabel totalSpentLabel = new JLabel("Recently You Spent: "); 
    JTextField totalSpentTextField = new JTextField(TEXTFIELD_LENGTH); 

    //set some textfields non editable. 


    //set layout, 3 rows + 2 columns. 

    public DataPanel() 
    { 
     setLayout(new GridLayout(2,1)); 

     buildPane1(); 

     buildPane2(); 

     buildPane(); 

     add(pane); 


    //add components to panel DataPanel. 

} 

    public void buildPane() 
    { 
     pane.add(pane1); 
     pane.add(pane2); 
    } 

    public void buildPane1() 
    { 
     setLayout(new GridLayout(3,2)); 

     setBorder(BorderFactory.createLineBorder(Color.PINK, 2, true)); 

     balanceTextField.setEditable(false);  

     pane1.add(withdrawalLabel); 
     pane1.add(withdrawalText); 
     pane1.add(depositLabel); 
     pane1.add(depositText); 
     pane1.add(balanceLabel); 
     pane1.add(balanceTextField); 
    } 

    public void buildPane2() 
    { 
     setLayout(new GridLayout(2,2)); 

     setBorder(BorderFactory.createLineBorder(Color.black, 2, true)); 

     totalSavingTextField.setEditable(false); 
     totalSpentTextField.setEditable(false); 

     pane2.add(totalSavingLabel); 
     pane2.add(totalSavingTextField); 
     pane2.add(totalSpentLabel); 
     pane2.add(totalSpentTextField); 

    } 
} 

JFrame類:

import java.awt.BorderLayout; 
import java.awt.GridLayout; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTabbedPane; 


public class MainFrame extends JFrame { 
public final int WIDTH = 1000; 
public final int HEIGHT = 800; 

public DataPanel dataPane; 
public InfoPanel infoPane; 
public Menu menu; 

public JTabbedPane tabbedPane = new JTabbedPane(); 

//tab #1 
public JPanel spendingPane; 

//tab #2 
public JPanel personalPane; 

//tab #3 
public JPanel socialPane; 

//tab #4 
public JPanel chatPane; 



/** 
* Constructor. 
*/ 
public MainFrame() 
{ 
    setTitle("Personal Banking"); 
    setSize(WIDTH, HEIGHT); 
    setLayout(new BorderLayout()); 

    buildMenu(); 
    buildPanel(); 

    add(tabbedPane); 

    pack(); 
    setVisible(true); 
} 

/** 
* This methods builds all the components. 
*/ 

private void buildPanel() 
{ 
    //build main panel (Spending panel). 
    dataPane = new DataPanel(); 



    //add numbers panel to the tabbed panel. 
    tabbedPane.addTab("Numbers", dataPane); 

    //build personal information panel. 
    infoPane = new InfoPanel(); 
    personalPane = new JPanel(); 
    personalPane.add(infoPane); 

    //add personal information panel to the tabbed panel. 
    tabbedPane.addTab("Personal", personalPane); 


} 

/** 
* This function builds menu bar and menu items. 
*/ 
private void buildMenu() 
{ 
    menu = new Menu(); 
    setJMenuBar(menu.mainMenuBar); 
} 



public static void main(String args[]) 
{ 
    new MainFrame(); 
} 
} 

我嘗試了好幾種方法,但他們並沒有實際的工作。

***很明顯,我粘貼了第一堂課兩次。現在我修好了。對於那個很抱歉。

+0

兩個面板被正確地添加(儘可能接近我可以告訴),但你申請的佈局和邊框父面板,不知道這是你想達到什麼樣的... – MadProgrammer

+0

你可以添加一個主要的方法來顯示實際輸出運行時放? –

+0

你能提供一些它想要做什麼/看起來的想法嗎? – MadProgrammer

回答

1

根據你的榜樣(和一點點改變每個窗格的背景顏色),你可以看到,他們是被添加

Example

然而,這...

public void buildPane1() 
{ 
    setLayout(new GridLayout(3,2)); 

    setBorder(BorderFactory.createLineBorder(Color.PINK, 2, true)); 

這...

public void buildPane2() 
{ 
    setLayout(new GridLayout(2,2)); 

    setBorder(BorderFactory.createLineBorder(Color.black, 2, true)); 

看起來很可疑,因爲y的被應用到DataPanel,而不是(我懷疑你想)到各個面板...

因此改變它們看起來更像...

public void buildPane1() { 

    pane1.setLayout(new GridLayout(3, 2)); 
    pane1.setBorder(BorderFactory.createLineBorder(Color.PINK, 2, true)); 

//... 

public void buildPane2() { 
    pane2.setLayout(new GridLayout(2, 2)); 
    pane2.setBorder(BorderFactory.createLineBorder(Color.black, 2, true)); 

給我...

Example

+0

謝謝!現在我明白了!我最初做的是爲DataPanel設置佈局,而不是爲我想要的單個面板。它現在是有道理的! ;) –

+0

很高興幫助,把我的疑惑搞糊塗了;) – MadProgrammer