有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JFrame组件未出现

我对Java非常陌生,我正在尝试组装一个简单的时间计算器

为什么add()方法只抛出我最后添加的内容?当我运行程序时,它只显示“天”,而不是文本框和年份标签

import javax.swing.*;

public class TimeCalculator extends JFrame

{

    public static void main(String[] args) 
    {
      JOptionPaneMultiInput window = new JOptionPaneMultiInput();
      window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      window.setSize(300,500);
      window.setVisible(true);
    }

      public TimeCalculator()
    {
      super("Time Calculator");

        JTextField yearsField = new JTextField(5);
        JTextField daysField = new JTextField(5);
        JTextField hoursField = new JTextField(5);
        JTextField minutesField = new JTextField(5);
        JTextField secondsField = new JTextField(5);

        JLabel yearsLabel = new JLabel();
        JLabel daysLabel = new JLabel();
        JLabel hoursLabel = new JLabel();
        JLabel minutesLabel = new JLabel();
        JLabel secondsLabel = new JLabel();

        JCheckBox yearsCheckbox = new JCheckBox();
        JCheckBox daysCheckbox = new JCheckBox();
        JCheckBox hoursCheckbox = new JCheckBox();
        JCheckBox minutesCheckbox = new JCheckBox();
        JCheckBox secondsCheckbox = new JCheckBox();

        JLabel yearsCLabel = new JLabel();
        JLabel daysCLabel = new JLabel();
        JLabel hoursCLabel = new JLabel();
        JLabel minutesCLabel = new JLabel();
        JLabel secondsCLabel = new JLabel();

        JButton convertButton = new JButton();

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        yearsLabel.setText("Years");
        daysLabel.setText("Days");
        hoursLabel.setText("Hours");
        minutesLabel.setText("Minutes");
        secondsLabel.setText("Seconds");

        yearsCLabel.setText("Yr");
        daysCLabel.setText("D");
        hoursCLabel.setText("Hr");
        minutesCLabel.setText("Min");
        secondsCLabel.setText("Sec");

        convertButton.setText("Convert");
        convertButton.addActionListener(new java.awt.event.ActionListener()
            {
                public void actionPerformed(java.awt.event.ActionEvent evt)
                {
                    //doConvert(evt); this will be added later once i figure everything out
                }
            });


            add(yearsField);
            add(yearsLabel);
            add(daysField);
            add(daysLabel);
    }
}

共 (1) 个答案

  1. # 1 楼答案

    main()中提到的JOptionPaneMultiInput不是发布的源代码的一部分。考虑发布SSCCE

    对以下问题的答复:

    When I run the program it only shows "Days" instead of the textboxes and the years label.

    问题中出现的TimeCalculator扩展了JFrame。默认情况下JFrame使用BorderLayout布局。当使用BorderLayout时,不带约束参数的add()方法将产生BorderLayout.CENTER约束以添加组件。因此,将对象添加到BorderLayout的中心。每个后续的add()都会替换先前添加的组件。最后,只剩下daysLabel

    有关更多详细信息,请参见How to Use BorderLayout。另请参见A Visual Guide to Layout Managers了解其他布局管理器,因为框架中有许多控件,如果没有其他嵌套面板,则很难对其进行布局