我是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);
}
}
答案 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了解其他布局管理器,因为框架中有许多控件,如果没有其他嵌套面板,则很难将其布局。