【问题标题】:Java: GridLayout cells appear to mergeJava:GridLayout 单元格似乎合并
【发布时间】:2012-06-21 11:15:51
【问题描述】:

首先,我是编程新手,这是我在 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

【问题讨论】:

  • 这似乎是JTable 的案例。这是homework?如果是这样,最好将其标记为这样。
  • 始终知道您可以将GridLayout 对象作为new GridLayout(0, 4) 启动,无需在开始时进行计算或提供任何任意值,它只会容纳尽可能多的行。

标签: java swing merge cell grid-layout


【解决方案1】:
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 添加了一个不同的标签。

希望这足够清楚。有什么不清楚的就问吧。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 2021-07-26
      • 1970-01-01
      相关资源
      最近更新 更多