JFrame组件未出现

时间:2014-01-06 22:36:41

标签: java swing

我是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 个答案:

答案 0 :(得分:3)

JOptionPaneMultiInput中提到的

main()不是已发布源代码的一部分。考虑发布SSCCE

答案:

  

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

问题中出现的

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

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