【问题标题】:Calendar GridLayout日历网格布局
【发布时间】:2014-05-27 03:54:45
【问题描述】:

我很难让我的标题在它自己的线上。标题运行到一周中的几天,而不是显示标题,然后在底部显示日历中的天数。这是缺少面板吗?我已经尝试了多种更改,但我无法确定

package Exercise15_5;
import java.awt.*;
import javax.swing.*;
import java.util.*;

public class Exercise15_5 extends JFrame {
    public Exercise15_5(){
        //Create panel with gridlayout
        JPanel calendar = new JPanel(new BorderLayout());
        calendar.setLayout(new GridLayout(5,7));
        //Add headers
        String[] headers = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
        for(int i = 0; i <7; i++){
            calendar.add(new JLabel("" + headers[i]));
        }
        //Add days to calendar
        for(int i = 1; i <31; i++){
            calendar.add(new JLabel("" + i));
        }

        JPanel monthHeader = new JPanel(new BorderLayout());
        monthHeader.add(new JTextField("\t\t\t04/2014"), BorderLayout.NORTH);

        monthHeader.add(calendar, BorderLayout.CENTER);



        add(monthHeader);
    }

    public static void main(String[] args) {
        Exercise15_5 frame = new Exercise15_5();
        frame.setTitle("Exercise 15_5");
        frame.setSize(600,300);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);


    }

}

【问题讨论】:

    标签: java swing user-interface layout calendar


    【解决方案1】:

    尝试将您的面板布局改为new GridLayout(0,7)

    GridLayout API 声明如下:

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

    【讨论】:

    • 就是这样。谢谢!!!您会碰巧知道如何启动日历以反映当前月份吗?到目前为止我有
    • @MontyMax:我不知道,我以前从未使用过日期。 This thread 可能值得一读,但代码有点长。
    【解决方案2】:

    您的row 计数被1 所抵消(但0 更通用),我还建议您稍微清理一下构造函数。可能是这样的,

    // Create panel with gridlayout
    JPanel calendar = new JPanel(new GridLayout(6, 7)); // 6 (or 0), not 5.
    // Add headers
    String[] headers = { "Sunday", "Monday",
        "Tuesday", "Wednesday", "Thursday", "Friday",
        "Saturday" };
    // Use for-each loop.
    for (String header : headers) {
      calendar.add(new JLabel(header));
    }
    // Add days to calendar, use String.valueOf
    for (int i = 1; i < 31; i++) {
      calendar.add(new JLabel(String.valueOf(i)));
    }
    
    JPanel monthHeader = new JPanel(new BorderLayout());
    monthHeader.add(new JTextField("\t\t\t04/2014"),
        BorderLayout.NORTH);
    
    monthHeader.add(calendar, BorderLayout.CENTER);
    
    add(monthHeader);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 2013-04-24
      • 1970-01-01
      • 2017-10-26
      • 2020-05-19
      • 2011-11-17
      相关资源
      最近更新 更多