2012-06-19 36 views
2

首先,我是新来编程,这是在Java和编程一般我第一个重要任务,所以如果我做了一些令人难以置信的愚蠢,请告诉我,这样我就可以纠正不良习惯。的Java: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

+0

这似乎是一个'JTable'的情况。这是[标签:家庭作业]?如果是这样,那么标记它是有利的。 –

+1

始终知道,你可以启动'GridLayout'对象作为'新的网格布局(0,4)'没有必要做计算或提供在开始任何arbitary值,它会简单地适应,尽可能多的行,因为他们一起走。 –

回答

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); 
    } 
} 

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

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

希望这是非常明显的。只是问问是否有什么不清楚。

6

您添加相同标号的4倍。移动while循环