【问题标题】:GridLayout .add errorGridLayout .add 错误
【发布时间】:2015-04-30 04:55:30
【问题描述】:

我的程序中似乎有一个我无法终生修复的错误。

代码如下:

import javax.swing.*;
import javax.swing.text.*;

import java.awt.*;
import java.util.*;

public class CalendarGUI extends JPanel {
    ProgramCalendar currentCalendar;
    GregorianCalendar sideCalendar; 
    String[] month = {"January", "February", "March",  "April", "May", "June", "July", "August",
            "September", "October", "November", "December"};

    public CalendarGUI(ProgramCalendar pc){
        currentCalendar = pc;
        sideCalendar = new GregorianCalendar();
        JPanel calendarSidePanel = new JPanel();
        calendarSidePanel.setSize(400,400);
        calendarSidePanel.setLayout(new BorderLayout());
        //sets month
        JTextPane monthText = new JTextPane();
        monthText.setText(month[sideCalendar.get(Calendar.MONTH)]);
        calendarSidePanel.add(monthText, BorderLayout.NORTH);

        //main part of error
        JPanel sideCalendarMain = new JPanel(new GridLayout(6, 7, 5, 5));

        JTextPane sun = new JTextPane();
        sun.setText("Sun");
        sideCalendarMain.add(sun);

        JTextPane mon = new JTextPane();
        mon.setText("Mon");
        sideCalendarMain.add(mon);

        JTextPane tues = new JTextPane();
        tues.setText("Tues");
        sideCalendarMain.add(tues);

        JTextPane wed = new JTextPane();
        wed.setText("Wed");
        sideCalendarMain.add(wed);

        JTextPane thurs = new JTextPane();
        thurs.setText("Thur");
        sideCalendarMain.add(thurs);

        JTextPane fri = new JTextPane();
        fri.setText("Fri");
        sideCalendarMain.add(fri);

        JTextPane sat = new JTextPane();
        sat.setText("Sat");
        sideCalendarMain.add(sat);

        calendarSidePanel.add(sideCalendarMain, BorderLayout.CENTER);

        add(calendarSidePanel);
        setSize(1000,1000);
    }

}

问题是我以为它会这样显示:

            April
Sun Mon Tues Wed Thurs Fri Sat

而不是

 April
Sun Mon
Tues Wed
Thurs Fri
Sat

当前正在显示。

我只是在滥用 GridLayout,还是我遗漏了其他一些基本错误,或者是一些随机错误。 谢谢

【问题讨论】:

    标签: java grid-layout


    【解决方案1】:

    GridLayoud 中,行优先于列。来自文档:

    当行数和列数都已通过构造函数或 setRows 和 setColumns 方法设置为非零值时,指定的列数将被忽略。相反,列数由指定的行数和布局中的组件总数确定。因此,例如,如果指定了三行两列,并且向布局中添加了九个组件,它们将显示为三行三列。仅当行数设置为零时,指定列数才会影响布局。

    所以,您指定您的 GridLayout 有 6 行,这就是组件的布局方式。如果您只想指定一行,请将new GridLayout(6, 7, 5, 5) 更改为new GridLayout(1, 7, 5, 5)

    【讨论】:

    • 正文将包含一个日历,所以我需要一个 6x7 的网格来承载所有的日子。
    • 然后,一旦您有足够的组件要添加,它可能会起作用。目前,正如文档所说,行优先于列,因此您的 7 个组件正在布局以填充 6 行。
    • 啊,我明白了。谢谢。我想这是测试失败的例子,哈哈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2020-07-23
    相关资源
    最近更新 更多