并非所有组件都显示

时间:2012-04-08 02:56:37

标签: java swing user-interface

当我运行这个程序时,当我使用setSize确定窗口大小时,窗口会阻塞panel2中的按钮。

另外,如果我使用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);
    }
}

1 个答案:

答案 0 :(得分: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,然后在pack()之前调用setVisible(true)。不要设置GUI的大小。