0

このプログラムを実行すると、setSize を使用してウィンドウ サイズを決定すると、ウィンドウが panel2 のボタンをブロックします。

さらに、setSize() の代わりに frame.pack() を使用すると、すべてのコンポーネントが 1 つの水平線上に表示されますが、 panel1 コンポーネントが 1 行に表示され、 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);

pack()ボタンを panel2 に追加してから、 beforeを呼び出しますsetVisible(true)。GUI のサイズを設定しないでください。

于 2012-04-08T03:09:40.050 に答える