我对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
扩展JFrame
.默认情况下,JFrame
使用BorderLayout
布局。使用BorderLayout
时,add()
没有约束的方法参数会导致BorderLayout.CENTER
约束来添加组件。因此,您将对象添加到BorderLayout
的中心。每个后续的 add() 都会替换之前添加的组件。最后,只剩下daysLabel
。
有关更多详细信息,请参阅如何使用边框布局。另请参阅其他布局管理器的布局管理器可视化指南,因为框架中有许多控件,如果没有额外的嵌套面板,就很难对其进行布局。