簡體   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