Java:GridLayout单元格似乎合并

时间:2012-06-19 12:07:49

标签: java swing merge cell grid-layout

首先,我是编程新手,这是我在java和编程中的第一个主要任务,所以如果我做了一些非常愚蠢的事情请告诉我,这样我就可以纠正这个坏习惯。

无论如何,我正在尝试创建一个gridLayout,它具有可变数量的行,这些行将填充带有来自文件的文本的标签。我的问题特别是在gridLayout上是我添加的标签,并且常量似乎消失在一个巨大的单元格中。到目前为止,我所做的任何研究都没有导致任何事情,所以我认为我也可以提出这个问题。

public void fillTimetablePane(JPanel pane){
    int noOfRows = pref.getNoOFPeriods()+1; 
    pane.setLayout(new GridLayout(noOfRows,4));
    pane.setBorder(BorderFactory.createLineBorder(Color.black));
    JLabel label = new JLabel();
    int i=0;
    while (i<4){

        switch (i) {
        case 0: label.setText("Lesson");
                break;
        case 1: label.setText("Period");
                break;
        case 2: label.setText("Room");
                break;
        case 3: label.setText("Teacher");
                break;
        }
        i++;
        pane.add(label);
    }
}

这是我添加运行以下代码时会发生什么的图像: http://www.freeimagehosting.net/1hqn2

2 个答案:

答案 0 :(得分:6)

您添加了相同的标签4次。在while循环中移动新的JLabel

答案 1 :(得分:6)

public void fillTimetablePane(JPanel pane){
    int noOfRows = pref.getNoOFPeriods()+1; 
    pane.setLayout(new GridLayout(noOfRows,4));
    pane.setBorder(BorderFactory.createLineBorder(Color.black));
    //JLabel label = new JLabel();   // from here
    int i=0;                         //   V
    while (i<4){                     //   V
        JLabel label = new JLabel(); // to here
        switch (i) {
        case 0: label.setText("Lesson");
                break;
        case 1: label.setText("Period");
                break;
        case 2: label.setText("Room");
                break;
        case 3: label.setText("Teacher");
                break;
        }
        i++;
        pane.add(label);
    }
}

好的,为什么它不适用于您的情况但在我的情况下工作正常?问题是您添加标签4次并更改其间的文本。在布局中,单个组件只能存在一次。那么当你第二次/第三次/第四次添加你的标签时,它在网格中的位置将被更新而不会再次添加。

就我而言,我实际上在循环的每次迭代中都创建了一个新的JLabel,因此为JPanel添加了不同的标签。

希望这很清楚。只要问一下有什么不清楚的地方。