【问题标题】:How to make JPanel sizes relative to JFrame size如何使 JPanel 大小相对于 JFrame 大小
【发布时间】:2013-09-02 04:16:15
【问题描述】:

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

结果如下:


(来源:staticflickr.com

我该如何解决这个问题?例如,假设我想让车身面板占框架的 80%,另外两个各占 10%。

【问题讨论】:

    标签: java swing jframe jpanel


    【解决方案1】:

    不要担心百分比,而是根据其大小和文本大小创建适合的组件。使用适当的布局管理器组合将很容易让您做到这一点。例如,整体布局可以是带有日历放置的 BorderLayout.CENTER 的 BorderLayout。前两个组件可以放在使用 BoxLayout 的 JPanel 中,也可以放在主 JPanel BorderLayout.PAGE_START 中。

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

    另外,作为垃圾神笔记,请考虑使用专门为此目的而构建的工具,JCalendar

    【讨论】:

    【解决方案2】:

    而不是 GridLayout,它的每行/列的大小完全相同,请查看 GridBagLayout 作为替代方案。它有点笨重,但您可以更好地控制组件大小。

    【讨论】:

    • +1 for GridBagLayout,我最喜欢的来自 Swing 库的 Layout :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多