繁体   English   中英

JFrame组件未出现

[英]JFrame Components Not Appearing

我对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);
    }
}

main()提到的JOptionPaneMultiInput不属于发布的源代码。 考虑发布SSCCE

答案为:

当我运行程序时,它仅显示“天”,而不是文本框和年份标签。

TimeCalculator中出现的TimeCalculator扩展了JFrame 默认情况下, JFrame使用BorderLayout布局。 使用BorderLayout ,没有约束参数的add()方法将导致BorderLayout.CENTER约束添加组件。 因此,您可以将对象添加到BorderLayout的中心。 随后的每个add()都会替换之前添加的组件。 最后,仅剩daysLabel

有关更多详细信息,请参见如何使用BorderLayout 另请参阅其他布局管理器的布局管理器视觉指南》,因为框架中有许多控件,如果没有其他嵌套面板,则很难进行布局。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM