2012-04-08 88 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的大小。

相關問題