0

当我运行这个程序时,当我使用 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);
    }
}
4

1 回答 1

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()before setVisible(true)。不要设置 GUI 的大小。

于 2012-04-08T03:09:40.050 回答