2013-08-29 69 views
1

對於Java(和編程)來說,這很新穎。試圖找出如何使Jpanel的大小相對於JFrame的大小。我只是想創建一個日曆,我有三個不同的面板:一個用於月份標題;一個星期的一天;另一個是日曆主體。如何使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 Calendar

我該如何解決這個問題?例如,假設我想讓框架面板的80%和其他兩個10%。

回答

4

不要擔心百分數,而是根據文字大小和文字大小創建適合其的組件。使用佈局管理器的適當組合可以輕鬆讓您做到這一點。例如,總體佈局可以是BorderLayout,其中壓光機放置了BorderLayout.CENTER。前兩個組件可以放置在使用BoxLayout的JPanel中,並且可以放置在主JPanel BorderLayout.PAGE_START中。

如果您絕對需要使用百分比,那麼您可能必須創建自己的佈局管理器,這在您的舞臺上可能有點棘手,但如果絕對需要,也不會太難。

另外作爲垃圾紙幣,考慮只使用一個工具爲此目的而建造的,JCalendar

+3

另請考慮[tag:jcalendar]。 – trashgod

+0

@trashgod:謝謝。添加回答。 –

2

而不是GridLayout,其中每行/列大小完全相同,請參閱GridBagLayout作爲替代。這有點笨重,但您可以更好地控制組件大小。

+0

+1 GridBagLayout是我最喜歡的Swing庫中的佈局:-) –

相關問題