Java:GridLayout单元格似乎合并

use*_*263 2 java merge swing 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*ter 6

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


bri*_*ium 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

在我的情况下,我实际上JLabel在循环的每个迭代中创建一个新的,因此添加一个不同的标签JPanel.

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