java - 并非所有组件都显示

标签 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);
    }
}

最佳答案

您的问题可能是打印错误,因为您将所有组件添加到 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 的大小。

关于java - 并非所有组件都显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10060029/

相关文章:

java - 使用 Jersey 发送 JSON 字符串数组

从命令行参数接受现有文本文件列表的 Java 程序

java - 如何使 JCombobox 具有更改其他 JCombobox 上的项目的功能

java - 根据单击的 View 模式格式化 JPanel 以包含 ArrayList<JComponent> 和分割 View

python - 如何在 tkinter 中保存按钮命令的结果?

memory - Blackberry - UI 堆栈中推送的最大屏幕数量

java - CrudRepository existsBy 返回错误结果

java - 使用 session bean 或在 session 中存储自定义对象?

java - jgoodies 如何删除使用 PanelBuilder 添加的组件?

java - 尝试更新 JLabel 的内容