java JFrame组件未出现
我对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 楼答案
main()
中提到的JOptionPaneMultiInput
不是发布的源代码的一部分。考虑发布SSCCE。对以下问题的答复:
问题中出现的
TimeCalculator
扩展了JFrame
。默认情况下JFrame
使用BorderLayout
布局。当使用BorderLayout
时,不带约束参数的add()
方法将产生BorderLayout.CENTER
约束以添加组件。因此,将对象添加到BorderLayout
的中心。每个后续的add()都会替换先前添加的组件。最后,只剩下daysLabel
有关更多详细信息,请参见How to Use BorderLayout。另请参见A Visual Guide to Layout Managers了解其他布局管理器,因为框架中有许多控件,如果没有其他嵌套面板,则很难对其进行布局