2014-06-26 53 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