我是Java(和编程)的新手。试图弄清楚如何使Jpanel大小相对于JFrame大小。我只是想创建一个日历,我有三个不同的面板:一个用于月份标题;一周中的一天;日历机构的另一个。
这是我的代码:
public DisplayACalendar() {
setLayout(new GridLayout(3, 1));
// create JPanel for month/year
JPanel monthTitle = new JPanel();
monthTitle.add(new JLabel(month + " " + year));
// create JPanel for Days of Week
String[] days = {"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"};
JPanel daysOfWeekPanel = new JPanel(new GridLayout(1, 7));
for (int i = 0; i < 7; i++) {
daysOfWeekPanel.add(new JLabel(days[i]));
}
// Create JPanel for calendar dates
JPanel calendarMonth = new JPanel(new GridLayout(6, 7));
for (int i = 1; i < firstDay; i++)
calendarMonth.add(new JLabel());
for (int i = 1; i <= daysInMonth; i++) {
JLabel jlblDayCell = new DayCell(i);
jlblDayCell.setHorizontalAlignment(JLabel.RIGHT);
calendarMonth.add(jlblDayCell);
}
int daysLeft = 42 - daysInMonth - firstDay;
for (int i = 0; i < daysLeft; i++)
calendarMonth.add(new JLabel());
add(monthTitle);
add(daysOfWeekPanel);
add(calendarMonth);
}
这是结果:
我该如何解决这个问题?例如,假设我想让车身面板占框架的80%,另外两个占10%。
答案 0 :(得分:4)
不要担心百分比,而是根据文字的大小和文字大小创建适合的组件。使用适当的布局管理器组合可以轻松地执行此操作。例如,整体布局可以是BorderLayout,日历放置BorderLayout.CENTER。前两个组件可以放在使用BoxLayout的JPanel中,它可以放在主JPanel BorderLayout.PAGE_START中。
如果你绝对需要使用百分比,那么你可能需要创建自己的布局管理器,这在你的舞台上可能有点棘手,但如果绝对需要的话,也不是非常困难。
同样作为trashgod说明,请考虑使用专为此目的而构建的工具JCalendar。
答案 1 :(得分:2)
而不是GridLayout,它将每行/每列的大小完全相同,请查看GridBagLayout作为替代。它有点笨重,但您可以更好地控制组件大小。