2012-04-08 53 views
0

当我运行此程序时,当我使用setSize来确定窗口大小时,窗口将挡住面板2中的按钮。另外,如果我使用frame.pack()而不是setSize(),所有组件都在一条水平线上,但我试图让它们使panel1组件位于同一行,而panel2组件位于在他们的下面。并非所有显示的组件

有人可以详细解释这两个问题的答案吗?

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Exercise16_4 extends JFrame{ 
    // FlowLayout components of top portion of calculator 
    private JLabel jlbNum1 = new JLabel("Number 1"); 
    private JTextField jtfNum1 = new JTextField(4); 
    private JLabel jlNum2 = new JLabel("Number 2"); 
    private JTextField jtfNum2 = new JTextField(4); 
    private JLabel jlbResult = new JLabel("Result"); 
    private JTextField jtfResult = new JTextField(8); 

    // FlowLayout Components of bottom portion of calculator 
     private JButton jbtAdd = new JButton("Add"); 
    private JButton jbtSubtract = new JButton("Subtract"); 
    private JButton jbtMultiply = new JButton("Multiply"); 
    private JButton jbtDivide = new JButton("Divide"); 


    public Exercise16_4(){ 
     JPanel panel1 = new JPanel(); 
     panel1.setLayout(new FlowLayout(FlowLayout.CENTER, 3, 3)); 
     panel1.add(jlbNum1); 
     panel1.add(jtfNum1); 
     panel1.add(jlNum2); 
     panel1.add(jtfNum2); 
     panel1.add(jlbResult); 
     panel1.add(jtfResult); 

     JPanel panel2 = new JPanel(); 
     panel2.setLayout(new FlowLayout(FlowLayout.CENTER, 3, 10)); 
     panel1.add(jbtAdd); 
     panel1.add(jbtSubtract); 
     panel1.add(jbtMultiply); 
     panel1.add(jbtDivide); 

     add(panel1, BorderLayout.NORTH); 
     add(panel2, BorderLayout.CENTER); 
    } 

    public static void main(String[] args){ 
     Exercise16_4 frame = new Exercise16_4(); 

     frame.setTitle("Caculator"); 
     frame.setSize(400, 200); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     //frame.setResizable(false); 
     frame.setVisible(true); 
    } 
} 
+0

我明白,目前的任务有更好的布局管理器,但问题明确要求FlowLayout用于panel1和panel2 – 2012-04-08 03:02:39

回答

5

你的问题很可能在一个印刷错误,您要添加的所有组件PANEL1并没有给PANEL2:

// you create panel2 just fine 
    JPanel panel2 = new JPanel(); 
    panel2.setLayout(new FlowLayout(FlowLayout.CENTER, 3, 10)); 

    // but you don't use it! Change below to panel2. 
    panel1.add(jbtAdd); 
    panel1.add(jbtSubtract); 
    panel1.add(jbtMultiply); 
    panel1.add(jbtDivide); 

添加按钮PANEL2,然后setVisible(true)之前调用pack() 。不要设置GUI的大小。

相关问题