Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使JPanel大小相对于JFrame大小_Java_Swing_Jframe_Jpanel - Fatal编程技术网

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

Java 如何使JPanel大小相对于JFrame大小,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我对Java和编程相当陌生。试图找出如何使Jpanel大小相对于JFrame大小。我只是想创建一个日历,我有三个不同的面板:一个是月份标题;一周中的一天;另一个用于日历正文 这是我的密码: public DisplayACalendar() { setLayout(new GridLayout(3, 1)); // create JPanel for month/year JPanel monthTitle = new JPanel(); monthTi

我对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%。

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

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


<>也如TrasGod所指出的,考虑使用一个为这个精确的目的而建的工具。p> 不要担心百分比,而是根据组件大小和文本大小创建合适的组件。使用适当的布局管理器组合将很容易做到这一点。例如,整体布局可以是BorderLayout,日历放置在BorderLayout.CENTER中。最上面的两个组件可以放在使用BoxLayout的JPanel中,也可以放在主JPanel BorderLayout.PAGE_START中

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


<>也如TrasGod所指出的,考虑使用一个为这个精确的目的而建的工具。p> 与GridLayout不同,GridLayout的每一行/每一列的大小都完全相同,我们可以将其作为替代方案。它有点笨重,但您可能更喜欢控制组件的大小。

与GridLayout不同,GridLayout的每一行/每一列的大小都完全相同,您可以另作选择。它有点笨重,但是你可以享受更多的控件大小。

也可以考虑。也可以考虑。+ 1,GridBagLayout,我最喜欢的布局从Swing库:-+ 1为GridBagLayout,我最喜欢的布局从Swing库: