繁体   English   中英

如何使JPanel大小相对于JFrame大小

[英]How to make JPanel sizes relative to JFrame size

我对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);

}

结果如下:

JFrame日历
(来源: staticflickr.com

我该如何解决? 例如,假设我要使车身面板占框架的80%,使另外两个分别占框架的10%。

不用担心百分比,而是根据它们的大小和文本的大小来创建适合的组件。 使用适当的布局管理器组合可以轻松地做到这一点。 例如,整体布局可以是BorderLayout,而压光机放置在BorderLayout.CENTER上。 前两个组件可以放在使用BoxLayout的JPanel中,也可以放在主JPanel BorderLayout.PAGE_START中。

如果您绝对需要使用百分比,那么您可能必须创建自己的布局管理器,这在您的阶段可能会有些棘手,但是如果绝对需要的话,也并不是太困难。

同样作为垃圾记录,请考虑仅使用为此特定目的而构建的工具JCalendar

而不是使用GridLayout来使每个行/列的大小完全相同,而可以选择GridBagLayout作为替代。 它有点笨重,但是您可以更好地控制组件的大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM