2014-01-06 3 views
0

Я очень новичок в Java, и я пытаюсь собрать простой калькулятор времени.Компоненты JFrame не отображаются

Почему метод 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); 
    } 
} 
+0

Возможно, вам стоит рассмотреть возможность использования 'LayoutManager', возможно,' GridLayout'. –

+0

Я думаю, что они перекрываются. –

ответ

3

JOptionPaneMultiInput упоминается в main() не является частью публикуемого исходного кода. Рассмотрите отправку SSCCE.

Ответ:

При запуске программы она показывает только «Дни» вместо текстовых полей и ярлыке лет.

TimeCalculator, который фигурирует в вопросе, распространяется JFrame. По умолчанию JFrame использует BorderLayout макет. Когда используется BorderLayout, метод add() без ограничений приводит к BorderLayout.CENTER ограничениям для добавления компонентов. Таким образом, вы добавляете свои объекты в центр BorderLayout. Каждый последующий add() заменяет предыдущий компонент, который был добавлен. В конце остается только daysLabel.

Для получения более подробной информации см. How to Use BorderLayout. Также см. A Visual Guide to Layout Managers для других менеджеров компоновки, поскольку у вас много элементов управления в вашем фрейме, и было бы сложно выложить его без дополнительных панелей.

Смежные вопросы