此 Java 代码使用 Swing 显示一个月的日历:
import java.awt.*;
import javax.swing.*;
public class Calendar extends JFrame {
JLabel days[] = new JLabel[31];
JLabel days_of_week[] = new JLabel[7];
JLabel month = new JLabel("July 2014");`
Calendar() {
super("Calendar");
setSize(260, 260);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
JPanel monthPane = new JPanel();
monthPane.add(month);
add(monthPane);
JPanel days_panel = new JPanel();
GridLayout calLayout = new GridLayout(6, 7);
days_panel.setLayout(calLayout);
String[] dayNames = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
for (int i = 0; i < 7; ++i) {
days_of_week[i] = new JLabel(dayNames[i]);
days_panel.add(days_of_week[i]);
}
JLabel blank1 = new JLabel();
days_panel.add(blank1);
JLabel blank2 = new JLabel();
days_panel.add(blank2);
for (int i = 0; i < days.length; ++i) {
days[i] = new JLabel("" + (i + 1));
days_panel.add(days[i]);
}
add(days_panel);
setVisible(true);
}
public static void main(String[] arguments) {
Calendar cal = new Calendar();
}
}
由于某种原因,当我删除行 setLayout(new FlowLayout());
时,日历标题消失了。 FlowLayout不是默认的吗?为什么我必须明确设置它才能使代码正常工作?
最佳答案
Isn't FlowLayout the default?
错误,Jframe的默认布局是BorderLayout
。
解决方案:
如果你想删除Flowlayout那么你需要指定JPanel放置的位置
示例:
JLabel blank1 = new JLabel();
days_panel.add(blank1,BorderLayout.NORTH);
JLabel blank2 = new JLabel();
days_panel.add(blank2,BorderLayout.CENTER);
关于java - 为什么需要为 Java Swing 应用程序设置布局管理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25027149/